先谢啦! 求教mediaplayer控件播放vcd格式的文件?清高手赐教! 还有如何禁止使用alt+tab热键?谢谢啦! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 利用MediaPlayer播入VCD影碟的简单方法,前提是系统中必须安装了XING软解压程序或其它VCD播入程序 (也可以是解压卡),并且为系统提供了标准的MCI设备驱动程序: 1.运行Delphi,单击SYSTEM工具组中的Mediaplayer控件,在窗体中建立此控制对象; 2.修改DEVICETYPE属性为dtAUTOSELECT,修改FILENAME属性,使之指向一个磁盘中的MPG文件或光盘中的.DAT文 件; 3.在窗体中加入两个命令按钮,置CAPTION属性分别为“打开”和“ 关闭”; 4.双击命令按钮1,加入代码: MediaPlayer1.OPEN; 5.双击命令按钮2,加入代码: MediaPlayer1.STOP; MediaPlayer1.CLOSE; Close; 按下F9或用鼠标点击运行按钮执行该程序,按下“打开”按钮则媒体控制按键组出现颜色表示可用,按下PLAY键后即 可播入指定的VCD视频文件,按下“关闭”按钮则停止播入并结束程序 禁止使用alt+tab热键,用HOOK:unit Main;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls;type TMainForm = class(TForm) EnableBtn: TButton; DisableBtn: TButton; AboutBtn: TButton; ExitBtn: TButton; Bell1: TBevel; Image: TImage; procedure AboutBtnClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure EnableBtnClick(Sender: TObject); procedure DisableBtnClick(Sender: TObject); procedure ExitBtnClick(Sender: TObject); procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); procedure FormDestroy(Sender: TObject); private { Private declarations } public { Public declarations } end;var MainForm: TMainForm;implementationuses Hook;{$R *.dfm}type // Declaration from VC++ WINUSER.H // PKBDLLHOOKSTRUCT = ^KBDLLHOOKSTRUCT; KBDLLHOOKSTRUCT = record vkCode: DWORD; scanCode: DWORD; flags: DWORD; time: DWORD; dwExtraInfo: DWORD; end;const LLKHF_ALTDOWN = KF_ALTDOWN shr 8; WH_KEYBOARD_LL = 13;var hhkNTKeyboard: HHOOK; // 钩子句柄// 低级键盘钩子回调函数//function LowLevelKeyboardFunc(nCode: Integer; w_Param: WPARAM; l_Param: LPARAM): LRESULT; stdcall;var blEatKeystroke: Boolean; p: PKBDLLHOOKSTRUCT;begin blEatKeystroke := False; if nCode = HC_ACTION then begin case w_Param of WM_KEYDOWN, WM_SYSKEYDOWN, WM_KEYUP, WM_SYSKEYUP: begin p := PKBDLLHOOKSTRUCT(l_Param); // 进行按键过滤 blEatKeystroke := (((p^.vkCode = VK_TAB) and ((p^.flags and LLKHF_ALTDOWN) <> 0)) or ((p^.vkCode = VK_ESCAPE) and ((p^.flags and LLKHF_ALTDOWN) <> 0)) or ((p^.vkCode = VK_ESCAPE) and ((GetKeyState(VK_CONTROL) and $8000) <> 0)) or ((p^.vkCode = VK_DELETE) and ((p^.flags and LLKHF_ALTDOWN) <> 0) and ((GetKeyState(VK_CONTROL) and $8000) <> 0))); end; end; // End of Case end; if blEatKeystroke then begin Result := 1; // 捕获这些组合键,按键消息由自己处理,必须返回 1 Hook.ShowHookInfo; // 显示一个窗口,你可以改为自己的处理代码 end else // 其他的按键,交由别的线程处理(过滤) Result := CallNextHookEx(0, nCode, w_Param, l_Param);end;procedure TMainForm.AboutBtnClick(Sender: TObject);begin Application.MessageBox( PChar('Windows NT 键盘钩子演示程序'#13#10#13#10'作者:Phoenix2000,2001年7月。'), '关于本程序', 0);end;procedure TMainForm.FormCreate(Sender: TObject);begin hhkNTKeyboard := 0; // 钩子句柄初值end;procedure TMainForm.EnableBtnClick(Sender: TObject);begin // 挂上键盘钩子 // hhkNTKeyboard := SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardFunc, HInstance, 0); if hhkNTKeyboard <> 0 then Application.MessageBox('系统键盘钩子已经启动了!', '信息', 64) else Application.MessageBox('无法启动系统键盘钩子!', '错误', 16);end;procedure TMainForm.DisableBtnClick(Sender: TObject);begin // 解除键盘钩子 // if hhkNTKeyboard = 0 then Application.MessageBox('系统键盘钩子已经被禁止了!', '警告', 48) else begin UnhookWindowsHookEx(hhkNTKeyboard); // 卸载钩子 hhkNTKeyboard := 0; Hook.CleanHookForm; // 此行代码与钩子无关,不要误解,是我自己的窗体清除 Application.MessageBox('成功卸载系统键盘钩子!', '信息', 64) end;end;procedure TMainForm.ExitBtnClick(Sender: TObject);begin Close;end;procedure TMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);begin CanClose := (hhkNTKeyboard = 0); if not CanClose then Application.MessageBox('请先卸载系统键盘钩子,然后再退出本程序!', '警告', 48);end;procedure TMainForm.FormDestroy(Sender: TObject);begin if hhkNTKeyboard <> 0 then begin UnhookWindowsHookEx(hhkNTKeyboard); hhkNTKeyboard := 0; end; Hook.CleanHookForm;end;end.以上的代码在 NT 4.0 + SP3/Win 2000 下能捕获 Alt + Tab、Alt + ESC、Ctrl + ESC 这样的组合键,而 Ctrl + Alt + Del 无法捕获。有兴趣的朋友自己研究一下又没有别的办法,或是我的代码由否不妥之处。另外,NT 环境下用低级键盘钩子,只有在 NT 4.0 + SP3以上的版本才有效,在 NT 4 + SP2 都是无效的。在 Win2000 下当然有效了 非常感谢!我抄回去自己研究一下代码!我想弄清楚如何安装XING软解压程序,再者我的机子有金山影霸2003,豪杰2003,媒体播放器8.0,如何让mediaplayer控件支持.dat文件?谢谢! 98下: begin WritePrivateProfileString('mci extensions', 'mpg', 'MPEGVideo', 'win.ini'); WritePrivateProfileString('mci extensions', 'dat', 'MPEGVideo', 'win.ini'); WritePrivateProfileString('mci extensions', 'mpv', 'MPEGVideo', 'win.ini'); WritePrivateProfileString('mci extensions', 'mpeg', 'MPEGVideo', 'win.ini'); WritePrivateProfileString('mci extensions', 'cjt', 'MPEGVideo', 'win.ini'); WritePrivateProfileString('mci extensions', 'avi', 'AVIVideo', 'win.ini'); WritePrivateProfileString('mci', 'MPEGVideo', 'mciqtz.drv', 'system.ini'); 上面的代码,也就是修改了win.ini,system.ini文件。 2000下: 1.改注册表:HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\MCI32 把MPEGVideo的键值改成想要的驱动就可,默认为 "mciqtz32.dll "。 2.HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\MCI Extensions (新建键,键字符串为 "dat ",值为 "MPEGVideo ") SQL Server2000提高查询效率 用ADO连接Oracle能自动弹出输入密码的对话框吗? Delphi2005初体验 C/S连接的问题 小问题快赚分啦!急!!! 打印报表预览时‘打印设置’和’打印‘按钮怎么都失效了? 如何控制文本直接输出的字体???高手不来,我不爽!!! 紧急求助! 用临时表的问题 !!!!!!!!!!只是郁闷而已,散分!!!!!!!!! 求教,在线等待,谢谢! 我要模拟鼠标点击单选钮并传递值,好像这样做不对,哪位进来看一下?
MediaPlayer1.CLOSE;
Close; 按下F9或用鼠标点击运行按钮执行该程序,按下“打开”按钮则媒体控制按键组出现颜色表示可用,按下PLAY键后即 可播入指定的VCD视频文件,按下“关闭”按钮则停止播入并结束程序
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;type
TMainForm = class(TForm)
EnableBtn: TButton;
DisableBtn: TButton;
AboutBtn: TButton;
ExitBtn: TButton;
Bell1: TBevel;
Image: TImage;
procedure AboutBtnClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure EnableBtnClick(Sender: TObject);
procedure DisableBtnClick(Sender: TObject);
procedure ExitBtnClick(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
MainForm: TMainForm;implementationuses Hook;{$R *.dfm}type
// Declaration from VC++ WINUSER.H
//
PKBDLLHOOKSTRUCT = ^KBDLLHOOKSTRUCT;
KBDLLHOOKSTRUCT = record
vkCode: DWORD;
scanCode: DWORD;
flags: DWORD;
time: DWORD;
dwExtraInfo: DWORD;
end;const
LLKHF_ALTDOWN = KF_ALTDOWN shr 8;
WH_KEYBOARD_LL = 13;var
hhkNTKeyboard: HHOOK; // 钩子句柄// 低级键盘钩子回调函数
//
function LowLevelKeyboardFunc(nCode: Integer; w_Param: WPARAM;
l_Param: LPARAM): LRESULT; stdcall;
var
blEatKeystroke: Boolean;
p: PKBDLLHOOKSTRUCT;
begin
blEatKeystroke := False;
if nCode = HC_ACTION then
begin
case w_Param of
WM_KEYDOWN,
WM_SYSKEYDOWN,
WM_KEYUP,
WM_SYSKEYUP:
begin
p := PKBDLLHOOKSTRUCT(l_Param); // 进行按键过滤
blEatKeystroke := (((p^.vkCode = VK_TAB) and
((p^.flags and LLKHF_ALTDOWN) <> 0)) or
((p^.vkCode = VK_ESCAPE) and
((p^.flags and LLKHF_ALTDOWN) <> 0)) or
((p^.vkCode = VK_ESCAPE) and
((GetKeyState(VK_CONTROL) and $8000) <> 0)) or
((p^.vkCode = VK_DELETE) and
((p^.flags and LLKHF_ALTDOWN) <> 0) and
((GetKeyState(VK_CONTROL) and $8000) <> 0)));
end;
end; // End of Case
end;
if blEatKeystroke then
begin
Result := 1; // 捕获这些组合键,按键消息由自己处理,必须返回 1
Hook.ShowHookInfo; // 显示一个窗口,你可以改为自己的处理代码
end
else
// 其他的按键,交由别的线程处理(过滤)
Result := CallNextHookEx(0, nCode, w_Param, l_Param);
end;procedure TMainForm.AboutBtnClick(Sender: TObject);
begin
Application.MessageBox(
PChar('Windows NT 键盘钩子演示程序'#13#10#13#10'作者:Phoenix2000,2001年7月。'),
'关于本程序', 0);
end;procedure TMainForm.FormCreate(Sender: TObject);
begin
hhkNTKeyboard := 0; // 钩子句柄初值
end;procedure TMainForm.EnableBtnClick(Sender: TObject);
begin
// 挂上键盘钩子
//
hhkNTKeyboard := SetWindowsHookEx(WH_KEYBOARD_LL,
LowLevelKeyboardFunc,
HInstance, 0);
if hhkNTKeyboard <> 0 then
Application.MessageBox('系统键盘钩子已经启动了!', '信息', 64)
else
Application.MessageBox('无法启动系统键盘钩子!', '错误', 16);
end;procedure TMainForm.DisableBtnClick(Sender: TObject);
begin
// 解除键盘钩子
//
if hhkNTKeyboard = 0 then
Application.MessageBox('系统键盘钩子已经被禁止了!', '警告', 48)
else
begin
UnhookWindowsHookEx(hhkNTKeyboard); // 卸载钩子
hhkNTKeyboard := 0;
Hook.CleanHookForm; // 此行代码与钩子无关,不要误解,是我自己的窗体清除
Application.MessageBox('成功卸载系统键盘钩子!', '信息', 64)
end;
end;procedure TMainForm.ExitBtnClick(Sender: TObject);
begin
Close;
end;procedure TMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
CanClose := (hhkNTKeyboard = 0);
if not CanClose then
Application.MessageBox('请先卸载系统键盘钩子,然后再退出本程序!', '警告', 48);
end;procedure TMainForm.FormDestroy(Sender: TObject);
begin
if hhkNTKeyboard <> 0 then
begin
UnhookWindowsHookEx(hhkNTKeyboard);
hhkNTKeyboard := 0;
end;
Hook.CleanHookForm;
end;end.以上的代码在 NT 4.0 + SP3/Win 2000 下能捕获 Alt + Tab、Alt + ESC、Ctrl + ESC 这
样的组合键,而 Ctrl + Alt + Del 无法捕获。有兴趣的朋友自己研究一下又没有别的办
法,或是我的代码由否不妥之处。另外,NT 环境下用低级键盘钩子,只有在 NT 4.0 + SP3
以上的版本才有效,在 NT 4 + SP2 都是无效的。在 Win2000 下当然有效了
我想弄清楚如何安装XING软解压程序,再者我的机子有金山影霸2003,豪杰2003,媒体播放器8.0,如何让mediaplayer控件支持.dat文件?谢谢!
begin
WritePrivateProfileString('mci extensions', 'mpg', 'MPEGVideo', 'win.ini');
WritePrivateProfileString('mci extensions', 'dat', 'MPEGVideo', 'win.ini');
WritePrivateProfileString('mci extensions', 'mpv', 'MPEGVideo', 'win.ini');
WritePrivateProfileString('mci extensions', 'mpeg', 'MPEGVideo', 'win.ini');
WritePrivateProfileString('mci extensions', 'cjt', 'MPEGVideo', 'win.ini');
WritePrivateProfileString('mci extensions', 'avi', 'AVIVideo', 'win.ini');
WritePrivateProfileString('mci', 'MPEGVideo', 'mciqtz.drv', 'system.ini');
上面的代码,也就是修改了win.ini,system.ini文件。
2000下:
1.改注册表:HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\MCI32
把MPEGVideo的键值改成想要的驱动就可,默认为 "mciqtz32.dll "。
2.HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\MCI Extensions (新建键,键字符串为 "dat ",值为 "MPEGVideo ")