Alt・スタートキーの無効化
Alt・スタートキーの無効化
Enter キーが有効に出来るのは知っていますが、
Alt キーとスタートキーを無効にすることは出来るのでしょうか?
Alt キーとスタートキーを無効にすることは出来るのでしょうか?
返信@yu0627
出来ます。ただし、無効化するプログラムはDLL内に書く必要があります。
ローレベルキーボードフックというものです。
詳しくはこちらのサイトを見てください。
http://www.kumei.ne.jp/c_lang/sdk2/sdk_161.htm
--2007/01/04 19:36追記---
ローレベルキーフックのDLLについてはまだ公開していないあるソフトで必要なため作成したことがあります。
ただ、自分仕様に拡張してしまったのでシンプルではないプログラムになっちゃってるので、今の所ソースコードの公開は無いです...。
ローレベルキーボードフックというものです。
詳しくはこちらのサイトを見てください。
http://www.kumei.ne.jp/c_lang/sdk2/sdk_161.htm
--2007/01/04 19:36追記---
ローレベルキーフックのDLLについてはまだ公開していないあるソフトで必要なため作成したことがあります。
ただ、自分仕様に拡張してしまったのでシンプルではないプログラムになっちゃってるので、今の所ソースコードの公開は無いです...。
最後に編集したユーザー yu0627 [ 2007年1月04日(木) 19:36 ], 累計 3 回
yu0627 さん、ありがとうございます。
僕は C が全く出来ませんが、
頑張ってやってみます。
> 回答ではなくて失礼なんですけど、どうしてオルトキーとウィンドウズキーを無効にしたいんでしょう?
僕は今、Windows のログイン機能みたいな、
ユーザー名とパスワードを入力しないと終了しないプログラムを作っています。
それは、タイトルバーのない MainWnd を最前面ウィンドウにし、
最大化表示させてそのうえにウィンドウを開くようにしているのですが、
折角デスクトップのツールバーを隠しているのに、
スタートキーを押してメニューを開けたら意味がありませんし、
Alt キーが有効だと F4 キーと一緒に押されると閉じてしまうので、
そのプログラムが全く意味を成さなくなってしまうからです。
僕は C が全く出来ませんが、
頑張ってやってみます。
> 回答ではなくて失礼なんですけど、どうしてオルトキーとウィンドウズキーを無効にしたいんでしょう?
僕は今、Windows のログイン機能みたいな、
ユーザー名とパスワードを入力しないと終了しないプログラムを作っています。
それは、タイトルバーのない MainWnd を最前面ウィンドウにし、
最大化表示させてそのうえにウィンドウを開くようにしているのですが、
折角デスクトップのツールバーを隠しているのに、
スタートキーを押してメニューを開けたら意味がありませんし、
Alt キーが有効だと F4 キーと一緒に押されると閉じてしまうので、
そのプログラムが全く意味を成さなくなってしまうからです。
冬期休業だったので今日は久しぶりの出勤です。明日はまた休みだと気合を入れて頑張ってきます、ということで。
> Alt キーが有効だと F4 キーと一緒に押されると閉じてしまうので、
> そのプログラムが全く意味を成さなくなってしまうからです。
この部分についてはおそらく解決です。
特殊な方法で閉じれるイコール通常の方法では閉じれない、閉じれないようにしましょう。
特殊な方法を取った時にisClose変数をTRUEにすることで閉じることができるようになります。
> 折角デスクトップのツールバーを隠しているのに、
> スタートキーを押してメニューを開けたら意味がありませんし、
ツールバーっていうのはタスクバーのことですよね...?。
う~んどうやって隠しましょうか。
むむむ...。
> 僕は今、Windows のログイン機能みたいな、
> ユーザー名とパスワードを入力しないと終了しないプログラムを作っています。
そもそもこの仕様が間違いなんじゃないでしょうか?
限りなく特殊な方法を取らなければ終了できないっていうのは、それができない人にとってエレクトリックサンダー(パソコンの電源を強制的に落とす)しか残っていません。(Alt+Ctrl+Delでプロセスを終了させてもオーケー?)
オルトキーやウィンドウズキーまで制限されてますしね。
ユーザー名とパスワードを入力しないとメインプログラムが始まらないようにしてはいかがでしょう?
> Alt キーが有効だと F4 キーと一緒に押されると閉じてしまうので、
> そのプログラムが全く意味を成さなくなってしまうからです。
この部分についてはおそらく解決です。
コード: 全て選択
' TRUEで閉じれる
' FALSEで閉じれない
Dim isClose=FALSE As BOOL
' ウィンドウの終了ボタンが押された時
Sub MainWnd_QueryClose(ByRef cancel As Integer)
If isClose Then
cancel=FALSE
Else
cancel=TRUE
End If
End Sub
特殊な方法を取った時にisClose変数をTRUEにすることで閉じることができるようになります。
> 折角デスクトップのツールバーを隠しているのに、
> スタートキーを押してメニューを開けたら意味がありませんし、
ツールバーっていうのはタスクバーのことですよね...?。
う~んどうやって隠しましょうか。
むむむ...。
> 僕は今、Windows のログイン機能みたいな、
> ユーザー名とパスワードを入力しないと終了しないプログラムを作っています。
そもそもこの仕様が間違いなんじゃないでしょうか?
限りなく特殊な方法を取らなければ終了できないっていうのは、それができない人にとってエレクトリックサンダー(パソコンの電源を強制的に落とす)しか残っていません。(Alt+Ctrl+Delでプロセスを終了させてもオーケー?)
オルトキーやウィンドウズキーまで制限されてますしね。
ユーザー名とパスワードを入力しないとメインプログラムが始まらないようにしてはいかがでしょう?
質問への回答ではないですが、
自分の経験からひとつ発言をば。。。。
> > 僕は今、Windows のログイン機能みたいな、
> > ユーザー名とパスワードを入力しないと終了しないプログラムを作っています。
> そもそもこの仕様が間違いなんじゃないでしょうか?
> 限りなく特殊な方法を取らなければ終了できないっていうのは、それができない人にとってエレクトリックサンダー(パソコンの電源を強制的に落とす)しか残っていません。(Alt+Ctrl+Delでプロセスを終了させてもオーケー?)
> オルトキーやウィンドウズキーまで制限されてますしね。
>
> ユーザー名とパスワードを入力しないとメインプログラムが始まらないようにしてはいかがでしょう?
業務用のアプリケーションで、複数人が触るソフトを開発したことがありますが、
その場合、アルバイトなんかが間違ってソフトを終わらせないように、
起動と終了には必ず現場監督しか知らないパスワードを入力しないと
いけないなんてことがありました。
横槍すんませんでした^^
自分の経験からひとつ発言をば。。。。
> > 僕は今、Windows のログイン機能みたいな、
> > ユーザー名とパスワードを入力しないと終了しないプログラムを作っています。
> そもそもこの仕様が間違いなんじゃないでしょうか?
> 限りなく特殊な方法を取らなければ終了できないっていうのは、それができない人にとってエレクトリックサンダー(パソコンの電源を強制的に落とす)しか残っていません。(Alt+Ctrl+Delでプロセスを終了させてもオーケー?)
> オルトキーやウィンドウズキーまで制限されてますしね。
>
> ユーザー名とパスワードを入力しないとメインプログラムが始まらないようにしてはいかがでしょう?
業務用のアプリケーションで、複数人が触るソフトを開発したことがありますが、
その場合、アルバイトなんかが間違ってソフトを終わらせないように、
起動と終了には必ず現場監督しか知らないパスワードを入力しないと
いけないなんてことがありました。
横槍すんませんでした^^
Re: 返信@yu0627
> >#pragma data_seg("MY_DATA")
> ...。
> ちゃんとページを下のほうまで見てください...。
>
> これは必要ないです。
ありがとうございます。
一応やってみたのですが、間違いだらけだと思うので、
夜に投稿させていただきます。
それから、
RESULT CALLBACK MyHookProc...
の所を、
Function EventCall_MyHookProc(...
にしたのですが、これで良いのですか?
> ...。
> ちゃんとページを下のほうまで見てください...。
>
> これは必要ないです。
ありがとうございます。
一応やってみたのですが、間違いだらけだと思うので、
夜に投稿させていただきます。
それから、
RESULT CALLBACK MyHookProc...
の所を、
Function EventCall_MyHookProc(...
にしたのですが、これで良いのですか?
自分でやってみて、このようになりました。
間違いがたくさんあると思います。
一応全部載せておきます。
HOOK.abp(55) - "0x39" 無効な識別子です
というエラーが出ます。
これはどうすれば良いのでしょうか?
間違いがたくさんあると思います。
一応全部載せておきます。
[ここをクリックすると内容が表示されます]
HOOK.abp(55) - "0x30" 無効な識別子ですコード: 全て選択
#include "HOOK.idx"
'-------------------------------------------------------------------
' メモ - このファイルには、DLLの構成要素を記述します。
' (例:関数定義、グローバル変数、定数定義など)
'
' エクスポートが必要な関数には、"Export" 修飾子を指定します。
' (例:Function Export FuncName() As Long)
'-------------------------------------------------------------------
Function Export DllMain(hinstDLL As HINSTANCE, fdwReason As DWord, lpvReserved As VoidPtr) As Long
'DLLエントリポイント
Select Case fdwReason
Case DLL_PROCESS_ATTACH
'DLLがプロセス空間にロードされた時に実行されます。
_System_StartupProgram()
DllMain=1
End Select
End Function
declare function SetWindowsHookEx lib "user32" alias "SetWindowsHookExA" (idHook As DWord,lpfn As HINSTANCE,hMod As HINSTANCE,dwThreadId As DWord) as long
declare function UnhookWindowsHookEx lib "user32" (ByVal hhk As Long) as long
const WH_KEYBOAD=2
dim hMyHook=0 as HINSTANCE
dim hInst as HINSTANCE
function Export SetHook()
hMyHook=SetWindowsHookEx(WH_KEYBOAD,AddressOf(MyHookProc),hInst,0)
if hMyHook=NULL then
MessageBox(0,"フックに失敗","dll",MB_OK)
Else
MessageBox(0,"フックに成功","dll",MB_OK)
End If
return 0
End Function
function Export ResetHook()
if UnhookWindowsHookEx(hMyHook)=0 then
MessageBox(0,"フック解除に成功","dll",MB_OK)
End If
return 0
End Function
function Export MyHookProc(nCode As Integer,wp As WPARAM,lp As LPARAM) As DWord
dim str[256] as char
if nCode<0 then
return CallNextHookEc(hMyHook,nCode,wp,lp)
End If
if wp>=0x30 And wp<=0x39 then
wsprintf(str,"hMyHook = %d",hMyHook)
MessageBox(0,str,"MyHookProc",MB_OK)
return CallNextHookEx(hMyHook,nCode,wp,lp)
End If
wsprintf(str,Ex"キー入力はインターセプトされました。\r\nフックハンドル = %d",hMyHook)
MessageBox(0,str,"インターセプト",MB_OK)
return TRUE
End Function
HOOK.abp(55) - "0x39" 無効な識別子です
というエラーが出ます。
これはどうすれば良いのでしょうか?