C语言中对一个窗口程序调用时如何关闭该程序!

时间:2022-02-13 02:39:35
请教: C语言中对一个窗口程序调用时如何关闭该程序!比如我在c语言中利用system命令调用了我用vb写的一个窗口程序,但我如何在c语言中用命令关闭这个窗口程序呢???????????

12 个解决方案

#1


system的方式貌似不行~

你可以用自己创建进程的方式来启动 另一个程序,这样你可以控制~

#2


恳请高手能说的详细些

#3


#include <windows.h>
#include <stdio.h>



int main(void)
{
BOOL bNewProcess;
DWORD dwExternExitCode;

PROCESS_INFORMATION process_info;
STARTUPINFO startup_info = {sizeof(STARTUPINFO)};


bNewProcess = CreateProcess(TEXT("D:\\Programming\\spt12\\Debug\\spt12.exe"), NULL,
NULL, NULL,
FALSE, 0,
NULL, NULL,
&startup_info, &process_info);

if (!bNewProcess)
printf("%d\r\n", GetLastError());

//WaitForSingleObject(process_info.hProcess, 100000);

//GetExitCodeProcess(process_info.hProcess, &dwExternExitCode);

Sleep(100);

// close the process
TerminateProcess(process_info.hProcess, 0x00000001);

//printf("%d\r\n", dwExternExitCode);

return 0;
}

#4


Use Message Loop.

Send a WM_CLOSE message to the window that you want to close.

SendMessage (WindowHandle, WM_CLOSE,0,0);

#5


这个是我以前回答的问题的代码~ 我稍微该了下, 大致方向肯定没错,具体细节看msdn~

---------------------------
这段代码应该可以直接用了~  另外别忘了TEXT("D:\\Programming\\spt12\\Debug\\spt12.exe")换成你自己的 exe(就是vb写的):)

#6


Use Message Loop.
Send a WM_CLOSE message to the window that you want to close.
SendMessage (WindowHandle, WM_CLOSE,0,0);

---------------------
这个ms也行~ 不过没试过: 不过首先要 使用 FindWindow 找到 目标的handle 才行~

#7


不过~ 好像跨进程的SendMessage 只支持  WM_COPYDATA, WM_GETTEXT, WM_SETTEXT~ 有点记不清了~

#8


HWND hwnd = FindWindow(0, lpTaskName);//获取窗口句柄

if (hwnd)
{
PostMessage(hwnd, WM_CLOSE, 0, 0);    //发送关闭消息
CloseHandle(hwnd);
}

#9


感谢jokar和wangfustudio,

#10


另外用 SendMessage 的话 不只到 VB 能不能行~

#11


这个8是WINDOWS API 吗。。
建议你买一本,WINDOWS C++编程,
估计前几章写的就是这个。
至于WINDOWS API  对付窗口吗。他们 把窗口 的激活,杀死(终止)都写成
。。。。。
这个我也不知道用什么词来描述,
到是他们都已经做成现有的事件了之类的东西了,你一看就明白了。。。

#12


ShellExecute或者WinExec 

#1


system的方式貌似不行~

你可以用自己创建进程的方式来启动 另一个程序,这样你可以控制~

#2


恳请高手能说的详细些

#3


#include <windows.h>
#include <stdio.h>



int main(void)
{
BOOL bNewProcess;
DWORD dwExternExitCode;

PROCESS_INFORMATION process_info;
STARTUPINFO startup_info = {sizeof(STARTUPINFO)};


bNewProcess = CreateProcess(TEXT("D:\\Programming\\spt12\\Debug\\spt12.exe"), NULL,
NULL, NULL,
FALSE, 0,
NULL, NULL,
&startup_info, &process_info);

if (!bNewProcess)
printf("%d\r\n", GetLastError());

//WaitForSingleObject(process_info.hProcess, 100000);

//GetExitCodeProcess(process_info.hProcess, &dwExternExitCode);

Sleep(100);

// close the process
TerminateProcess(process_info.hProcess, 0x00000001);

//printf("%d\r\n", dwExternExitCode);

return 0;
}

#4


Use Message Loop.

Send a WM_CLOSE message to the window that you want to close.

SendMessage (WindowHandle, WM_CLOSE,0,0);

#5


这个是我以前回答的问题的代码~ 我稍微该了下, 大致方向肯定没错,具体细节看msdn~

---------------------------
这段代码应该可以直接用了~  另外别忘了TEXT("D:\\Programming\\spt12\\Debug\\spt12.exe")换成你自己的 exe(就是vb写的):)

#6


Use Message Loop.
Send a WM_CLOSE message to the window that you want to close.
SendMessage (WindowHandle, WM_CLOSE,0,0);

---------------------
这个ms也行~ 不过没试过: 不过首先要 使用 FindWindow 找到 目标的handle 才行~

#7


不过~ 好像跨进程的SendMessage 只支持  WM_COPYDATA, WM_GETTEXT, WM_SETTEXT~ 有点记不清了~

#8


HWND hwnd = FindWindow(0, lpTaskName);//获取窗口句柄

if (hwnd)
{
PostMessage(hwnd, WM_CLOSE, 0, 0);    //发送关闭消息
CloseHandle(hwnd);
}

#9


感谢jokar和wangfustudio,

#10


另外用 SendMessage 的话 不只到 VB 能不能行~

#11


这个8是WINDOWS API 吗。。
建议你买一本,WINDOWS C++编程,
估计前几章写的就是这个。
至于WINDOWS API  对付窗口吗。他们 把窗口 的激活,杀死(终止)都写成
。。。。。
这个我也不知道用什么词来描述,
到是他们都已经做成现有的事件了之类的东西了,你一看就明白了。。。

#12


ShellExecute或者WinExec