Alt・スタートキーの無効化

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
返信する
メッセージ
作成者
M.S.
記事: 212
登録日時: 2005年6月01日(水) 21:51
お住まい: 奈良県北西部

Alt・スタートキーの無効化

#1 投稿記事 by M.S. »

Enter キーが有効に出来るのは知っていますが、
Alt キーとスタートキーを無効にすることは出来るのでしょうか?
yu0627
記事: 154
登録日時: 2005年5月31日(火) 14:53

返信@yu0627

#2 投稿記事 by yu0627 »

 出来ます。ただし、無効化するプログラムは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 回
7
記事: 473
登録日時: 2005年5月31日(火) 18:51
お住まい: 新潟県
連絡する:

#3 投稿記事 by 7 »

お昼にこの投稿を見てちょっと調べてみたら結構むずかしそうだなぁと思ったのと、オルトキーとウィンドウズキーを無効にして得られるアドバンテージがよく分からなかったので無視してました...。

回答ではなくて失礼なんですけど、どうしてオルトキーとウィンドウズキーを無効にしたいんでしょう?
M.S.
記事: 212
登録日時: 2005年6月01日(水) 21:51
お住まい: 奈良県北西部

#4 投稿記事 by M.S. »

yu0627 さん、ありがとうございます。
僕は C が全く出来ませんが、
頑張ってやってみます。

> 回答ではなくて失礼なんですけど、どうしてオルトキーとウィンドウズキーを無効にしたいんでしょう?

僕は今、Windows のログイン機能みたいな、
ユーザー名とパスワードを入力しないと終了しないプログラムを作っています。
それは、タイトルバーのない MainWnd を最前面ウィンドウにし、
最大化表示させてそのうえにウィンドウを開くようにしているのですが、
折角デスクトップのツールバーを隠しているのに、
スタートキーを押してメニューを開けたら意味がありませんし、
Alt キーが有効だと F4 キーと一緒に押されると閉じてしまうので、
そのプログラムが全く意味を成さなくなってしまうからです。
7
記事: 473
登録日時: 2005年5月31日(火) 18:51
お住まい: 新潟県
連絡する:

#5 投稿記事 by 7 »

冬期休業だったので今日は久しぶりの出勤です。明日はまた休みだと気合を入れて頑張ってきます、ということで。

> 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でプロセスを終了させてもオーケー?)
オルトキーやウィンドウズキーまで制限されてますしね。

ユーザー名とパスワードを入力しないとメインプログラムが始まらないようにしてはいかがでしょう?
ゲスト

#6 投稿記事 by ゲスト »

質問への回答ではないですが、
自分の経験からひとつ発言をば。。。。

> > 僕は今、Windows のログイン機能みたいな、
> > ユーザー名とパスワードを入力しないと終了しないプログラムを作っています。
> そもそもこの仕様が間違いなんじゃないでしょうか?
> 限りなく特殊な方法を取らなければ終了できないっていうのは、それができない人にとってエレクトリックサンダー(パソコンの電源を強制的に落とす)しか残っていません。(Alt+Ctrl+Delでプロセスを終了させてもオーケー?)
> オルトキーやウィンドウズキーまで制限されてますしね。
>
> ユーザー名とパスワードを入力しないとメインプログラムが始まらないようにしてはいかがでしょう?

業務用のアプリケーションで、複数人が触るソフトを開発したことがありますが、
その場合、アルバイトなんかが間違ってソフトを終わらせないように、
起動と終了には必ず現場監督しか知らないパスワードを入力しないと
いけないなんてことがありました。


横槍すんませんでした^^
M.S.
記事: 212
登録日時: 2005年6月01日(水) 21:51
お住まい: 奈良県北西部

#7 投稿記事 by M.S. »

すみません、暫く AB ができなかったので返信が遅れてしまいました。

教えていただいたサイトのコードを AB のコードにしようとしたところ、
一番初めのところでつまづいてしまいました。

#include <windows.h>

#pragma data_seg("MY_DATA")

上はなんとなくわかるのですが、どうすれば良いのかわからず、
下は、何のことか全くわかりません。
yu0627
記事: 154
登録日時: 2005年5月31日(火) 14:53

返信@yu0627

#8 投稿記事 by yu0627 »

> #include <windows.h>
これは無視していいです。
ActiveBasicではWindowsでのプログラミングで必要な宣言は基本的なものは最初からインクルードされます。

>#pragma data_seg("MY_DATA")
...。
ちゃんとページを下のほうまで見てください...。

これは必要ないです。
M.S.
記事: 212
登録日時: 2005年6月01日(水) 21:51
お住まい: 奈良県北西部

Re: 返信@yu0627

#9 投稿記事 by M.S. »

> >#pragma data_seg("MY_DATA")
> ...。
> ちゃんとページを下のほうまで見てください...。
>
> これは必要ないです。

ありがとうございます。

一応やってみたのですが、間違いだらけだと思うので、
夜に投稿させていただきます。

それから、
RESULT CALLBACK MyHookProc...
の所を、
Function EventCall_MyHookProc(...
にしたのですが、これで良いのですか?
M.S.
記事: 212
登録日時: 2005年6月01日(水) 21:51
お住まい: 奈良県北西部

#10 投稿記事 by M.S. »

自分でやってみて、このようになりました。
間違いがたくさんあると思います。
一応全部載せておきます。
HOOK.abp(55) - "0x30" 無効な識別子です
HOOK.abp(55) - "0x39" 無効な識別子です
というエラーが出ます。
これはどうすれば良いのでしょうか?
返信する