【问题标题】:ShowWindow alternativesShowWindow 替代品
【发布时间】:2012-10-17 00:53:45
【问题描述】:

显然我不能终止给定的进程,当它的主窗口被隐藏时(“最小化到托盘”)。所以我尝试在其他进程的 FormClosing 处理程序中再次显示窗口。也没用。

现在我想使用 ShowWindow

IntPtr Handle = Gateway->MainWindowHandle;
ShowWindow((HWND)Handle.ToPointer(), SW_SHOWDEFAULT);

不幸的是产生了

error LNK2028: Nicht aufgelöstes Token (0A000072) ""extern "C" int __stdcall ShowWindow(struct HWND__ *,int)" (?ShowWindow@@$$J18YGHPAUHWND__@@H@Z)", auf das in Funktion ""private: void __clrcall lidarctrl::Form1::Form1_FormClosing(class System::Object ^,class System::Windows::Forms::FormClosingEventArgs ^)" (?Form1_FormClosing@Form1@lidarctrl@@$$FA$AAMXP$AAVObject@System@@P$AAVFormClosingEventArgs@Forms@Windows@4@@Z)" verwiesen wird.
error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""extern "C" int __stdcall ShowWindow(struct HWND__ *,int)" (?ShowWindow@@$$J18YGHPAUHWND__@@H@Z)" in Funktion ""private: void __clrcall lidarctrl::Form1::Form1_FormClosing(class System::Object ^,class System::Windows::Forms::FormClosingEventArgs ^)" (?Form1_FormClosing@Form1@lidarctrl@@$$FA$AAMXP$AAVObject@System@@P$AAVFormClosingEventArgs@Forms@Windows@4@@Z)".

抱歉 - 德语错误;不知道如何更改编译器的语言环境。

Non resolved Token...in function...referenced by...

Reference to non-resolved extern symbol...in function...

感谢任何关于要包含哪个标头、要加载的库的提示。

我正在使用 Microsoft Visual C++ 2010 Express;该项目是一个普通的 Windows 窗体应用程序。

谢谢!

【问题讨论】:

  • 您可以使用隐藏/最小化/任何窗口终止进程。也许你需要从解释是什么阻止你这样做开始。
  • 同意罗曼;只需向隐藏的应用程序发送WM_CLOSE 消息。
  • 我正在使用GetProcessesByName 来获取我的其他进程(网关)。 Gateway->CloseMainWindow(); Gateway->WaitForExit(100); 只有在主窗口可见时才会杀死它。否则,其他进程将继续运行。
  • @MSalters, SendMessage((HWND)Handle.ToPointer(), WM_CLOSE, 0, 0); 产生与上述相同的错误消息(将 ShowWindow 替换为 SendMessage)。
  • @PaulWilhelm:您有链接错误,这意味着您无法将所有内容整合到您的应用程序中。看起来它首先不是 C++,但您将要使用的 API 仍然是本机 Win32。这将您的问题带到了 API 工作的实际不同空间,并且有很多方法可以将关闭请求传递给应用程序,但是您只需要从能够构建代码开始......

标签: c++ window terminate showwindow


【解决方案1】:

在从标准 Windows 窗体应用程序模板创建的项目中,没有链接的标准/默认库通常包含在本机项目中。您需要在项目设置或代码中明确添加它们。在包含<windows.h> 的地方添加#pragma,如下所示:

#define WIN32_LEAN_AND_MEAN
#include <windows.h>

#pragma comment(lib, "user32.lib") // <<--- Add Me

这将链接您丢失的ShowWindow

【讨论】:

    【解决方案2】:

    您可能没有使用 C++ 和 Win32。然后你会写

    #include <windows.h>
    //...
    {
      //...
      HWND Handle = Gateway->MainWindowHandle; // Gateway probably is your class.
      ShowWindow(Handle, SW_SHOWDEFAULT);
    }
    

    【讨论】:

    • 就像我说的,这是一个 Microsoft Visual C++ 2010 Express Windows Forms 应用程序项目。如果我没记错的话,那应该是 C++/CLI。 (仍然是 C++ 菜鸟。)所以 ShowWindow 是一个 Win32 函数;问题是如何在我的项目中使用它,这不是普通的 Win32。
    猜你喜欢
    • 1970-01-01
    • 2014-04-29
    • 2011-06-10
    • 2014-04-18
    • 2012-04-08
    • 2012-07-09
    • 2011-03-31
    • 2023-03-12
    • 2017-02-26
    相关资源
    最近更新 更多