社区
C++ 语言
帖子详情
GetLastError的返回值是1309,请教各位大侠应怎样改正,在线等……
yangli_ghost
2011-01-18 03:44:19
...全文
271
21
打赏
收藏
GetLastError的返回值是1309,请教各位大侠应怎样改正,在线等……
[图片]
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
21 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
yangli_ghost
2011-01-18
打赏
举报
回复
[Quote=引用 19 楼 hai040 的回复:]
控制台的输入好像都是阻塞式的
[/Quote]
阻塞式大多数是用于通信的吧,我这里没有用到通信呀
yangli_ghost
2011-01-18
打赏
举报
回复
如果用循环能实现的话,那么上面的代码要是没错的话应该可以,但是它还是只能监视第一个
yangli_ghost
2011-01-18
打赏
举报
回复
[Quote=引用 17 楼 hai040 的回复:]
那个循环可以试试timer
[/Quote]
#include "afxwin.h"
#include "iostream.h"
#include "Shlwapi.h"
#include "process.h"
#define HWND_NULL 0x0001
#define STRNAME_NULL 0x1001
#define NAME_NULL 0x1002
char *__g_pszWindowsName;
struct MYWINDOWSNAME
{
int n;
char Name[MAX_PATH];
};
typedef MYWINDOWSNAME *LPMYWINDOWSNAME;
struct WINDOWSNAME
{
int number;
char WindowsName[MAX_PATH];
};
typedef WINDOWSNAME *LPWINDOWSNAME;
BOOL CALLBACK EnumWindowsProc( HWND hWnd,LPARAM lParam )
{
if ( GetParent(hWnd) == NULL && IsWindowVisible(hWnd) ) //判断是否顶层窗口并且可见
{
char WindowTitle[100] = {0};
GetWindowText( hWnd,WindowTitle, 100 );
if ( StrStrI( WindowTitle, __g_pszWindowsName ) || stricmp( WindowTitle, __g_pszWindowsName ) == 0 )
{
DWORD dwPID = 0;
//MessageBox( NULL, "IS NULL!", NULL, MB_OK );
hWnd = FindWindow( NULL, WindowTitle );
if ( hWnd != NULL )
{
PostMessage( hWnd, WM_QUIT, 0, 0 );
}
else
{
DWORD dwError = GetLastError();
printf("%d\n", dwError);
}
}
}
if ( GetParent(hWnd) != NULL && IsWindowVisible(hWnd) )
{
char WindowTitle[100] = {0};
GetWindowText( hWnd,WindowTitle, 100 );
if ( StrStrI( WindowTitle, __g_pszWindowsName ) || stricmp( WindowTitle, __g_pszWindowsName ) == 0 )
{
DWORD dwPID = 0;
//MessageBox( NULL, "NOT NULL!", NULL, MB_OK );
hWnd = FindWindow( NULL, WindowTitle );
if ( hWnd != NULL )
{
PostMessage( hWnd, WM_CLOSE, 0, 0 );
}
else
{
DWORD dwError = GetLastError();
printf("%d\n", dwError);
}
}
}
return true;
}
// DWORD CloseWindowsByName( LPMYWINDOWSNAME lpMyWindowsName, char *pszWindowsName )
// {
// DWORD dwRet = 0;
// if ( lpMyWindowsName != NULL)
// {
// for ( int i = 0; i < lpMyWindowsName->n; i++ )
// {
// cout<<lpMyWindowsName[i].Name<<" ";
// }
// cout<<endl;
// }
// do
// {
// if ( pszWindowsName == NULL )
// {
// dwRet = NAME_NULL;
// break;
// }
// else
// {
// for ( int temp = 0; temp < lpMyWindowsName->n; temp++ )
// {
// if ( stricmp(lpMyWindowsName[temp].Name, pszWindowsName)== 0 )
// {
// while(1)
// {
// __g_pszWindowsName = pszWindowsName;
// EnumWindows( EnumWindowsProc, NULL );
// // cout<<GetLastError()<<endl;
// Sleep(3000);
// }
// }
// }
// }
// } while (0);
//
// return dwRet;
// }
DWORD CloseWindowsByName( LPMYWINDOWSNAME lpMyWindowsName, LPWINDOWSNAME lpWindowsName )
{
DWORD dwRet = 0;
if ( lpMyWindowsName != NULL)
{
for ( int i = 0; i < lpMyWindowsName->n; i++ )
{
cout<<lpMyWindowsName[i].Name<<" ";
}
cout<<endl;
}
do
{
if ( lpWindowsName == NULL )
{
dwRet = NAME_NULL;
break;
}
else
{
for ( int temp = 0; temp < lpMyWindowsName->n; temp++ )
{
for ( int num = 0; num < lpWindowsName->number; num++ )
{
if ( stricmp(lpMyWindowsName[temp].Name, lpWindowsName[num].WindowsName)== 0 )
{
while(1)
{
__g_pszWindowsName = lpWindowsName[num].WindowsName;
EnumWindows( EnumWindowsProc, NULL );
// cout<<GetLastError()<<endl;
Sleep(3000);
}
}
}
}
}
} while (0);
return dwRet;
}
void main()
{
LPMYWINDOWSNAME lpMyWindowsName = (LPMYWINDOWSNAME)malloc(1024);
LPWINDOWSNAME lpWindowsName = (LPWINDOWSNAME)malloc(1024);
cout<<"Please Input the WindowsName:"<<endl;
for ( int i = 0; i < 3; i++ )
{
cin.getline( lpMyWindowsName[i].Name, strlen(lpMyWindowsName[i].Name) );
lpMyWindowsName->n = i+1;
}
cout<<"Please Input another WindowsName:"<<endl;
for ( int j = 0; j < 5; j++ )
{
cin.getline( lpWindowsName[j].WindowsName, strlen(lpWindowsName[j].WindowsName) );
lpWindowsName->number = j+1;
}
// CloseWindowsByName( lpMyWindowsName, "世界之窗" );
CloseWindowsByName( lpMyWindowsName, lpWindowsName );
}
hai040
2011-01-18
打赏
举报
回复
控制台的输入好像都是阻塞式的
hai040
2011-01-18
打赏
举报
回复
那个循环可以试试timer
yangli_ghost
2011-01-18
打赏
举报
回复
[Quote=引用 15 楼 hai040 的回复:]
窗口的话在修改的响应函数里改值就行吧
控制台的话只能自己写多线程
[/Quote]
控制台的话就只能用多线程来实现了吗?
hai040
2011-01-18
打赏
举报
回复
窗口的话在修改的响应函数里改值就行吧
控制台的话只能自己写多线程
yangli_ghost
2011-01-18
打赏
举报
回复
要是用一个结构体数组来保存传入的值,然后和窗口名或标题比较,这样能不能实现呢
yangli_ghost
2011-01-18
打赏
举报
回复
[Quote=引用 12 楼 hai040 的回复:]
多项?
是关多种窗口?
调多次enumwindows
[/Quote]
不是,程序在监视一个窗口的同时,可以继续传入新值给pszWindowsName,然后程序有监视含有pszWindowsName的窗口,并且不能对之前窗口的监视
hai040
2011-01-18
打赏
举报
回复
多项?
是关多种窗口?
调多次enumwindows
yangli_ghost
2011-01-18
打赏
举报
回复
[Quote=引用 9 楼 hai040 的回复:]
EnumWindowsProc的定义?
[/Quote]
现在我的程序只是支持单项,现在要做成支持多项的
不用线程的话应该怎么做呢?
在程序一直监视含有pszWindowsName的窗口,并关闭它;(这是现在的功能)
yangli_ghost
2011-01-18
打赏
举报
回复
问题已经解决了,关键的原因就在EnumWindowsProc中,将返回值修改了
hai040
2011-01-18
打赏
举报
回复
EnumWindowsProc的定义?
yangli_ghost
2011-01-18
打赏
举报
回复
大侠们,帮帮忙呀,分不够还可以加的
yangli_ghost
2011-01-18
打赏
举报
回复
[Quote=引用 6 楼 bluesky12312388 的回复:]
网络是否连接好,是否有相关操作权限。
[/Quote]
这和网络没有关系,如果stricmp(lpMyWindowsName[temp].Name, pszWindowsName)== 0
就列举当前打开窗口,并关闭喊pszWindowsName的窗口
bluesky12312388
2011-01-18
打赏
举报
回复
网络是否连接好,是否有相关操作权限。
yangli_ghost
2011-01-18
打赏
举报
回复
DWORD CloseWindowsByName( LPMYWINDOWSNAME lpMyWindowsName, char *pszWindowsName )
{
DWORD dwRet = 0;
if ( lpMyWindowsName != NULL)
{
for ( int i = 0; i < lpMyWindowsName->n; i++ )
{
cout<<lpMyWindowsName[i].Name<<" ";
}
cout<<endl;
}
do
{
if ( pszWindowsName == NULL )
{
dwRet = NAME_NULL;
break;
}
else
{
for ( int temp = 0; temp < lpMyWindowsName->n; temp++ )
{
if ( stricmp(lpMyWindowsName[temp].Name, pszWindowsName)== 0 )
{
while(1)
{
__g_pszWindowsName = pszWindowsName;
EnumWindows( EnumWindowsProc, NULL );
cout<<GetLastError()<<endl;
Sleep(3000);
}
}
}
}
} while (0);
return dwRet;
}
yangli_ghost
2011-01-18
打赏
举报
回复
那个是GetLastError返回值意义的截图,在下面我已将1309所指的错误信息贴出来了
失落的凡凡
2011-01-18
打赏
举报
回复
楼主大概把CSDN的人都当成神了。大家不看你的工程,就知道你哪个文件的第几行的某个函数调用的第几个参数传错了。
bluesky12312388
2011-01-18
打赏
举报
回复
你的图挂了
加载更多回复(1)
GetLast
Error
返回值
说明
本文档列举了win32 API接口调用常见的错误码及其说明。
GetLast
Error
()
返回值
的意义
GetLast
Error
()的所有
返回值
的错误类型(汉语解释),非常有助于网络编程
GetLast
Error
()
返回值
GetLast
Error
()
返回值
从0到3259,了解错误原因,以便调试程序
GetLast
Error
()返回代码含义数据库
自己花了点时间做了个数据库,这样方便以后出错的时候查询,花了些时间了
GetLast
Error
.xlsx
GetLast
Error
的
返回值
,十进制,十六进制,宏定义,中文解释 如有遗失或者错误,请理解 参考链接:https://docs.microsoft.com/en-us/previous-versions/aa911366(v=msdn.10)?redirectedfrom=MSDN
C++ 语言
65,206
社区成员
250,518
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章