怎么使得一个USBKEY插入以后,一个程序自动运行啊?

时间:2022-10-18 16:11:02
就是有个可执行的程序,在插入特定的USBKey以后会自动运行?

大家友好的主意,帮我一下吧
呵呵
可能和开机自动运行差不多
或许是要用到注册表
但是 我实现每成功

16 个解决方案

#1


先写一个后台程序,在操作系统启动的时候自动运行,响应 WM_DEVICECHANGE 消息 ,如果有 USB key 插入再运行相应的程序就行了。



#2


补充下,如果是 U盘 就简单了,直接在 U盘 根目录创建一个 Autorun.inf 文件,里面写上

open=xxx.exe 就 ok

#3


怎么听上去象搞黑客的啊

#4


Autorun.inf

#5


AUTORUN.INF根本不可行,你能保证别人的一定打开了"自动播放"功能?我的电脑就是关闭的.因此这样根本不可行,如果你不在后台先写一个程序,根本没有办法保证程序能自动运行.你可以使用响应WM_DEVICECHANGE消息,然后判断是否为设备插入消息,再判断设备的ID号是否为所登记的设备号,如果是就运行指定的程序,或者你将功能一起写在后台程序上,如果是所指定的设备就运行某个函数,只有这样才是正确的。

#6


有谁写过吗?

#7


原来在VS2005已经实现,但是现在融合到原来的.c的代码里
就出现很多问题
响应消息 之前要先注册设备,但是总不成功

#8


1.AutoRun.inf 这个传统 但基本上大多机器都当漏斗防掉了

2.用进程监听,这个有点不爽

3.驱动自已写,驱动的框架支持设备插入时运行一个你的程序,如U盘哪个弹了图标就是一个程序实现的,这个可以根据设备自定义

#9


对大意的人 你就是做成一个普通exe 他也会去点
对小心的人像我 平时运行在受限组下 实施严格的安全策略 写系统目录、装东西你更是想都别想 我就是点了你的程序 你的发作再厉害 把document and settings下这个用户的目录一删你就傻了

#10


现在市面上已经有这样的Key产品了,加qq:476833461

#11


这二天刚写类似的代码,给你贴一段:


注册函数:
///////////////
BOOL CMainFrame::DoRegisterDeviceInterface()
{
// HDEVNOTIFY hDevNotify;//the device notification handle
    DEV_BROADCAST_DEVICEINTERFACE NotificationFilter;
    char szMsg[80];

    ZeroMemory( &NotificationFilter, sizeof(NotificationFilter) );
    NotificationFilter.dbcc_size = sizeof(DEV_BROADCAST_DEVICEINTERFACE);
    NotificationFilter.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE;
    NotificationFilter.dbcc_classguid = GUID_DEVCLASS_I43;

    m_hDevNotify = RegisterDeviceNotification( this->m_hWnd,
        &NotificationFilter,
        DEVICE_NOTIFY_WINDOW_HANDLE
);

    if(!m_hDevNotify) 
    {
        wsprintf(szMsg, "RegisterDeviceNotification failed: %d\n", 
GetLastError());
        TRACE(szMsg);
        return FALSE;
    }

    return TRUE;
}

/////////////////
在:
DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
DEV_BROADCAST_HDR * pParam = (DEV_BROADCAST_HDR *)lParam;
switch   (message) 

case   WM_DEVICECHANGE: 
{
switch   (wParam) 
{
case   DBT_DEVICEARRIVAL:
if (pParam->dbch_devicetype == DBT_DEVTYP_DEVICEINTERFACE)
{
                                  //做处理
}
                break; 
case   DBT_DEVICEREMOVECOMPLETE: 
if (pParam->dbch_devicetype == DBT_DEVTYP_DEVICEINTERFACE)
{
                                   //做处理
}
break; 
default: 
break; 
}

    } 
return CFrameWnd::DefWindowProc(message, wParam, lParam);
}
/////////////////////
//完成.

#12


给我分哦!

#13


我也想了解,谢谢LZ.

#14


关注

#15


   学习, 接分, 吼吼

#16


autorun.inf
也不会自动运行吧
要双击的吧

#1


先写一个后台程序,在操作系统启动的时候自动运行,响应 WM_DEVICECHANGE 消息 ,如果有 USB key 插入再运行相应的程序就行了。



#2


补充下,如果是 U盘 就简单了,直接在 U盘 根目录创建一个 Autorun.inf 文件,里面写上

open=xxx.exe 就 ok

#3


怎么听上去象搞黑客的啊

#4


Autorun.inf

#5


AUTORUN.INF根本不可行,你能保证别人的一定打开了"自动播放"功能?我的电脑就是关闭的.因此这样根本不可行,如果你不在后台先写一个程序,根本没有办法保证程序能自动运行.你可以使用响应WM_DEVICECHANGE消息,然后判断是否为设备插入消息,再判断设备的ID号是否为所登记的设备号,如果是就运行指定的程序,或者你将功能一起写在后台程序上,如果是所指定的设备就运行某个函数,只有这样才是正确的。

#6


有谁写过吗?

#7


原来在VS2005已经实现,但是现在融合到原来的.c的代码里
就出现很多问题
响应消息 之前要先注册设备,但是总不成功

#8


1.AutoRun.inf 这个传统 但基本上大多机器都当漏斗防掉了

2.用进程监听,这个有点不爽

3.驱动自已写,驱动的框架支持设备插入时运行一个你的程序,如U盘哪个弹了图标就是一个程序实现的,这个可以根据设备自定义

#9


对大意的人 你就是做成一个普通exe 他也会去点
对小心的人像我 平时运行在受限组下 实施严格的安全策略 写系统目录、装东西你更是想都别想 我就是点了你的程序 你的发作再厉害 把document and settings下这个用户的目录一删你就傻了

#10


现在市面上已经有这样的Key产品了,加qq:476833461

#11


这二天刚写类似的代码,给你贴一段:


注册函数:
///////////////
BOOL CMainFrame::DoRegisterDeviceInterface()
{
// HDEVNOTIFY hDevNotify;//the device notification handle
    DEV_BROADCAST_DEVICEINTERFACE NotificationFilter;
    char szMsg[80];

    ZeroMemory( &NotificationFilter, sizeof(NotificationFilter) );
    NotificationFilter.dbcc_size = sizeof(DEV_BROADCAST_DEVICEINTERFACE);
    NotificationFilter.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE;
    NotificationFilter.dbcc_classguid = GUID_DEVCLASS_I43;

    m_hDevNotify = RegisterDeviceNotification( this->m_hWnd,
        &NotificationFilter,
        DEVICE_NOTIFY_WINDOW_HANDLE
);

    if(!m_hDevNotify) 
    {
        wsprintf(szMsg, "RegisterDeviceNotification failed: %d\n", 
GetLastError());
        TRACE(szMsg);
        return FALSE;
    }

    return TRUE;
}

/////////////////
在:
DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
DEV_BROADCAST_HDR * pParam = (DEV_BROADCAST_HDR *)lParam;
switch   (message) 

case   WM_DEVICECHANGE: 
{
switch   (wParam) 
{
case   DBT_DEVICEARRIVAL:
if (pParam->dbch_devicetype == DBT_DEVTYP_DEVICEINTERFACE)
{
                                  //做处理
}
                break; 
case   DBT_DEVICEREMOVECOMPLETE: 
if (pParam->dbch_devicetype == DBT_DEVTYP_DEVICEINTERFACE)
{
                                   //做处理
}
break; 
default: 
break; 
}

    } 
return CFrameWnd::DefWindowProc(message, wParam, lParam);
}
/////////////////////
//完成.

#12


给我分哦!

#13


我也想了解,谢谢LZ.

#14


关注

#15


   学习, 接分, 吼吼

#16


autorun.inf
也不会自动运行吧
要双击的吧