スレ立てるまでもない、Win32APIのついての質問はこちらへどうぞ。
やさしいお兄さんたちが答えてくれるかも。
過去スレ、関連リンクは
>>2-5 くらい。
■注意
・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう
・日本語版MSDN Online Libraryは不完全です。英語版(
http://msdn.microsoft.com )の利用推奨
・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう
・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで
ん…
>>2 のMSDNに英語版のリンク書くの忘れた…。
5 :
前スレ966 :int 2ch =05/04/02(土) 01:51:00
前スレ966です。 いろいろとソースをいじっていて気づいたことがあります。 cmd.exeのExitProcessをフックできない、と書きましたが、 そもそもcmd.exeのプロセス内にフックDLLが注入されていないようです。 SetWindowsHookEx( WH_GETMESSAGE, GetMsgProc, hModule, 0); ↑でフックをセットして、フックDLLのDLL_PROCESS_ATTACHの所で、 GetCurrentProcessId( )で取得したプロセスIDをOutputDebugString( )で出力してみたのですが、 cmd.exeのプロセスIDが表示されませんでした。 cmd.exeだけ特殊なのでしょうか。 それとも、フックの仕方が間違っているのでしょうか。 ご助言いただけたらと思います。 よろしくお願いします。
6 :
デフォルトの名無しさん :int 2ch =05/04/02(土) 01:58:53 BE:18900623-###
ホックって読んでました><
>>5 cmd.exeはGetMessage()を呼んでないと思うよ。
8 :
デフォルトの名無しさん :int 2ch =05/04/02(土) 03:46:45
TCHAR(wchar)をcharに変換したい場合はどうすればいいのでしょうか?
>>8 その二つで検索してみれ
自分で解決するのも勉強だ
んだ
10 :
デフォルトの名無しさん :int 2ch =05/04/02(土) 04:57:01
一応今は、 char *c = (char*)malloc(sizeof(TCHAR) * _tcslen(str) + 1); sprintf((char*)c, "%S", str); っていう風にやってるんですが、これより効率的な方法はあるんですか?
あ、sprintfのcharキャストは要らないですね。そこはミスです。
>>10 いったい何がやりたいの?
その2行のコード、無茶苦茶だぞ。
UnicodeからMBCSに変換したい、ということだとしたら、 そのようにTCHARや_tcslenを使うのは間違い。
WideCharToMultiByte
15 :
デフォルトの名無しさん :int 2ch =05/04/02(土) 10:35:31
ListViewで アイコン一覧とコメント(名称) のリストを作成したく LV_ITEM item; item.mask= LVIF_TEXT | LVIF_IMAGE | LVIF_PARAM; ・ ・ という感じでリストビューを表示したのはよいのですが、 項目が増えると、右にスクロール(水平スクロールバーが表示される)してしまいます。 下に項目が増えていく(垂直スクロールバーのみが表示される)ように設定するには どうすればよいのでしょうか。教えてください
>>10 すごいコードだ。最近のこのスレでNo1じゃないのか
C++相談室で回答を得られましたので
http://pc8.2ch.net/test/read.cgi/tech/1106527792/n757-761 具体的な実装方法を模索していたところ以下のレスを発見しました。
908 名前:デフォルトの名無しさん :03/09/29 17:37
最初にくるメッセージが何であれ、
ATLのメッセージハンドリングっぽくすればいいだろうに。
...
wcex.lpfnWndProc = WndProc1st; //最初のコールバックを設定。
...
Mgr::Instance().SetData( ::GetCurrentThreadId(), this ); // データ一時保存
CreateWindowEx( ... ); // ウィンドウ作成
...
LRESULT CALLBACK WndProc1st( .... )
{
void * p = Mgr::Instance().GetData( ::GetCurrentThreadId() ); // データ取得
SetWindowLongPtr( hWnd, GWLP_USERDATA, (LONG_PTR)p ); // なんか処理
// WndProc を本来のものに変更
SetWindowLongPtr( hWnd, GWLP_WNDPROC, (LONG_PTR)WndProc );
return WndProc( hWnd, uMsg, wParam, lParam );
}
LRESULT CALLBACK WndProc( .... )
{
... // なんか処理
};
Mgr::Instance().Get/SetData() で this を渡す方法よりも
よりシンプルに実現する方法、思いつかれる方はいますか?
外部を経由するしかないと思う ↑のコードは一般化された「外部を経由する」パターンだから シンプルにしたとしても結局同じことになるよ
>>17 CREATESTRUCTのlpCreateParamsにthisを持たせるとか
関数の引数で、例えばMSGのポインタを扱いたい場合、 void hogea(MSG*); と、 void hogeb(PMSG); とやるのはどちらが推奨されるんでしょうか?
21 :
デフォルトの名無しさん :int 2ch =05/04/02(土) 12:46:41
PMSG
しかしPCMSGとかはないから、そういうときは結局 const MSG *などと書かなければならない。
>>19 それはできない。
なぜならCreateWindowExを呼んだ後、ウィンドウプロシージャへ来る1番最初のメッセージは
WM_CREATEでもなくWM_NCCREATEでもなくWM_GETMINMAXINFOだから。
なければ作ればいいじゃない。
>>15 はスルーされているが、マルチ?
猫でも・・・の Windows SDK 109 章は見たのかな。
この質問見て、自分の UnLha のファイル・リストにアイコン付けたら、見当ての
ファイルが探しやすいかと気がついた。
>>19 素敵な方法ありがとうございます
さっそく試してみましたら成功しました!
>>23 メインウインドウとコントロールの両方でWM_GETMINMAXINFOを捕捉してみましたが、
メインウインドウにしか投げられてきませんでした。
最大化・最小化に関係のないコントロールなら
>>19 さんの方法でも良いのかもしれないですね。
みなさんありがとうございます。
27 :
デフォルトの名無しさん :2005/04/02(土) 23:09:10
hSmile = LoadImage((HINSTANCE)GetWindowLong(hWnd,GWL_HINSTANCE), MAKEINTRESOURCE(IDB_SMILE),IMAGE_BITMAP, 0,0,LR_LOADFROMFILE); 上のようなソースをコンパイルしたところ。 error C2440: '=' : 'void *' から 'struct HBITMAP__ *' に変換することはできません。 というエラーメッセージが出てしまいます。 どこが駄目なのでしょうか?原因を教えてください。お願いします。
>>27 C++ではvoid *から他のポインタ型への変換をするにはstatic_castが必要。
HANDLEはvoid *のtypedefだし、それ以外のハンドルは全てなんらかのポインタからのtypedef。
hSmile = (HBITMAP*)LoadImage(
motoi hSmile = (HBITMAP)LoadImage(
キャストとかの例題をテンプレに追加した方がいいんでないか? スレが立つ度に見る気がする。
メンバ関数がコールバックに使えません、とか?
34 :
27 :2005/04/03(日) 00:49:03
先ほどはありがとうございました。 すみません。。もうひとつ質問があります。 LRESULT CALLBACK WndProc(HWND hWnd,UINT msg,WPARAM wp,LPARAM lp){ HDC hdc; PAINTSTRUCT ps; static HDC hMemDC; static HBITMAP hSmile; static BITMAP bitmap; switch(msg){ case WM_PAINT: hdc = BeginPaint(hWnd,&ps); hMemDC = CreateCompatibleDC(hdc); hSmile = (HBITMAP)LoadImage((HINSTANCE)GetWindowLong( hWnd,GWL_HINSTANCE), MAKEINTRESOURCE(IDB_SMILE),IMAGE_BITMAP,0,0,LR_LOADFROMFILE); SelectObject(hMemDC,hSmile); GetObject(hSmile,(int)sizeof(MAKEINTRESOURCE(IDB_SMILE)),&bitmap); BitBlt(hdc,0,0,bitmap.bmWidth,bitmap.bmHeight,hMemDC,0,0,SRCCOPY); DeleteDC(hMemDC); DeleteObject(hSmile); EndPaint(hWnd,&ps); break; case WM_DESTROY: PostQuitMessage(0); break; default: return (DefWindowProc(hWnd,msg,wp,lp)); } return 0; } 上記のソースはコンパイルは通るものの、目的の画像が描画されません。(クライアント領域には何も描画されませんでした。) 考えてみたのですがどこが悪いのか全然分かりません。どなたか原因を教えてください。お願いします。
>>34 hSmileがNULLならその引数に問題あり
リソース関係の引数に矛盾や間違いがないか確かめて見たら?
LR_LOADFROMFILE なのに MAKEINTRESOURCE(IDB_SMILE) なところとか。
次は「描画する度にメモリ消費が増えます」と来ると予想。
38 :
27 :2005/04/03(日) 01:29:53
35さんの言うようにhSmileがNULLでした。 36さんの言うようにLR_LOADFROMFILEはおかしいと思ったので、LR_DEFAULTCOLORに変更。 hSmileがNULLではなくなったようですが、まだ画像が表示されませんorz
>>38 頼むからAPIの戻り値を見て成功してるかどうか調べてから質問してくれ。
>>38 LR_DEFAULTCOLOR?
LR_CREATEDIBSECTIONじゃなかった
41 :
27 :2005/04/03(日) 02:05:06
GetObject(hSmile,(int)sizeof(MAKEINTRESOURCE(IDB_SMILE)),&bitmap); を GetObject(hSmile,(int)sizeof(BITMAP),&bitmap); にしたら描画ができました! みなさん、ありがとうございました。
タスクバーにでてるアプリの名前や情報を取得できるAPIってありますか? タスクバーにでてるアプリを楽に切り替えできるようにしたいのですが。
無いので頑張ってFindWindowExで潜っていく。 ついでにタスクバーの仕様はOSのバージョンで結構ころころ変わってる。
スクリーンキーボードを作ろうとしているのですが、 SendInputを使用して実現しようとしています。 フラグにKEYEVENTF_UNICODEを用い、 どのキーボード配列でも入力可能にしたいのですが、 UNICODEを使用すると入力された文字が変換待ちの全角になってしまいます。 Windowsのコントロールパネル内のキーボードを英語既定にするとうまくいくのですが、、、 IMEが関係しているのでしょうか?
特殊フォルダをドラッグ&ドロップ出来るようにするにはどうしたらいいのでしょうか? DragAcceptFilesを使って試してみましたが出来ませんでした。
46 :
デフォルトの名無しさん :2005/04/03(日) 18:44:09
48 :
デフォルトの名無しさん :2005/04/03(日) 19:00:49
Ternary Raster Operations
>>15 今まで ListBox だった dialog の pane を ListView に変えて、ファイル名の
表示を icon 付きに出来ました。
ListView の属性を、最初「小さなアイコン」で指定すると、item の追加で確かに
横へ追加されました。この属性を「レポート」にすると、縦のみの追加になりました。
また、「カラムにヘッダをつけない」にチェックを入れて、処理コードの方でも
何もしないと、内容の表示自体が出なかったのですが、処理コードの方には見だし
を挿入するようにしたら、期待通りになりました。(見だし挿入では、幅の指定は
ListView の RECT の幅から、垂直スクロールの幅を引いたものを使用。見だしの
文字列は表示はされないので、ダミー。)
選択された行は、(猫でも...にあるように)ListView_GetNextItem() で得られ
ました。
Unix系OSのgettimeofdayをエミュレートするのに ファイルタイムAPIを使うのはいかがなもんなんでしょう? QueryPerformanceFrequencyがあんまり重すぎるんで このあいだwebで見つけたGetSystemTimeAsFileTimeを使って エミュレートする方法を採用したんですが。 今取り組んでるのがそこそこタイミング精度に厳しいソフトなんで このままでいいのか元に戻した方がいいのか迷ってます。 ご教授よろしくお願いします。
52 :
デフォルトの名無しさん :2005/04/04(月) 00:33:12
特定のファイル、フォルダに作成日時とか更新日時を任意にセットする方法はありますでしょうか・・
53 :
デフォルトの名無しさん :2005/04/04(月) 01:27:55
メインウィンドウにダイアログをCHILDとして貼り付けているのですが そのダイアログでWM_LBUTTONDOWNメッセージを取得することができません。 どなたか教えていただけると助かります。
>>52 SetFileTimeという、まんまの名前のAPIがあるわけだが。
ちょっとは自分で調べたか?
55 :
デフォルトの名無しさん :2005/04/04(月) 02:16:01
>>54 すみません
ありがとうございます
次からは気をつけます
>52 )ノ SetFileTime
>>53 その説明では、わかる人は神様しかいないと思うが...
まさか、ダイアログに貼り付けてあるコントロール部分
クリックしてるんじゃないだろね
58 :
デフォルトの名無しさん :2005/04/04(月) 02:56:49
>57 すみません。説明不足でした。 貼り付けている子ダイアログにはコントロールは貼り付けておらず、 単純にダイアログの領域をクリックしたときのイベントを取得したいと思っています。 ダイアログの作成にはCreateDialog()を使用しています。 CreateDialog(hInst, (LPCTSTR)IDD_MAIN_CENTER, hWnd, (DLGPROC)DlgProc); その後、 LRESULT CALLBACK DlgProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_LBUTTONDOWN: // ここにイベントが入って来ない。 break; ・ ・ ・ といった状況です。 VCリソースエディタでの設定などがわるいのでしょうか・・・ ご教授いただけると大変助かります。。
>>58 作成したダイアログのハンドルがNULLでないかいひょっとして
NULLであれば(LPCTSTR)IDD_MAIN_CENTERを
MAKEINTRESOURCE(IDD_MAIN_CENTER)にかえてごらん
60 :
48 :2005/04/04(月) 03:08:25
>>49 理解できました。キーワードをありがとうございました。
61 :
デフォルトの名無しさん :2005/04/04(月) 03:08:35
>59 作成したダイアログはきちんとハンドルが取れていました。 MAKEINTRESOURCEで試してもイベントはとれませんでした。 WM_SIZEなどのイベントは取得できるのですが、、、
>>61 ひょっとして、ShowWindowしてないんじゃありませんか?
ShowWindowしてないと多分こないと思いますけど
63 :
デフォルトの名無しさん :2005/04/04(月) 03:42:45
>62 ShowWindowもしているのですが・・・ 通常Windowに子ダイアログを貼り付けて ダイアログのメッセージプロシージャで WM_LBUTTONDOWNなどは何の問題もなく受け取れるのでしょうか?
>>63 私の場合も同じ事やってますけど
バンバン来ますよメッセージ
CreateWinodowをオーバーラップウィンドウ作って
それにCreateDialogでインスタンスと親ウィンドウのハンドル渡してます
ダイアログのリソースはChildに設定してあとは何もチェックしてません
正常に動くサンプルを見つけてそれを改造するかたちにしたら
良いのではないでしょうか
私は行き詰った時は、そうしてます
お役に立ちそうもなくてすみません
ではおやすみなさい
65 :
デフォルトの名無しさん :2005/04/04(月) 03:53:46
>62 度々申し訳ありません。 実は、このダイアログを作成しているクラスの基底クラスで オーナードローをしているのですが、そこに原因がありました。。。 お騒がせしてすみません。 ご回答ありがとうございました。
66 :
42 :2005/04/04(月) 04:39:02
>>46 レスありがとうございます。
EnumWindowでウィンドウの列挙をやってみたのですが、この場合タスクバーに表示されてるアプリだけでなく、
タスクトレイにでてるようなアプリも列挙されますよね?
タスクマネージャの一つ目のタブに表示されてるアプリを取得したいのですが。
http://support.microsoft.com/kb/175030/JA/ 一般的なプログラミング タスクの 1 つに、実行中のすべての "アプリケーション" の列挙があります。
Windows タスク マネージャが良い例で、このプログラムでは 2 つの方法で "アプリケーション" の一覧が表示されます。
タスク マネージャの 1 つ目のタブには、デスクトップ上のすべての "アプリケーション ウィンドウ" の一覧が表示されます。
2 つ目のタブには、システム内のすべての "プロセス" の一覧が表示されます。この資料では、これらの両方のタスクを実行する方法について詳しく説明します。
プロセスの列挙と、デスクトップ上のトップレベル ウィンドウの列挙では、トップレベル ウィンドウを列挙する方が比較的簡単です。
トップレベル ウィンドウを列挙するには、EnumWindows() 関数を使用します。
この資料にかいてある「デスクトップ上のすべての "アプリケーション ウィンドウ" の一覧」を表示したいのですが、
この資料ではその方法がEnumWindowを使用した方法で解説してあります。
すでにかいたようにEnumWindowを使用してやってみたのですが、タスクマネージャの一つ目のタブに表示さてる
アプリだけを取得することはできなかったんです。どうすればいいでしょうか
>51 GetSystemTimeAsFileTimeは、変数の精度は100ns単位だけど、 実際は15ms単位くらいで増えていくことが多い(64回/秒しか変化しない)。 GetSystemTimeAdjustmentを呼べば、実際の精度が判る。 そうなら、timeBeginPeriod(1);して、timeGetTime()を呼んだ方がマシ。 QueryPerformanceCounterがあまりに重い、ってホント?
for( hwnd = GetWindow( GetDesktopWindow(), GW_CHILD ); NULL != hwnd; hwnd = GetWindow( hwnd, GW_HWNDNEXT ) ) { if( IsWindow( hwnd ) && IsWindowVisible( hwnd ) && (style = GetWindowStyle( hwnd ) & WS_CAPTION) == WS_CAPTION && !(style & WS_POPUP) ) { // ウィンドウハンドル列挙 } }
>>51 QueryPerformanceCounterは、デュアルCPUのマシンでも、高々1000クロックくらいだったよ。
これでも重いというのであれば、OSを介さずに、RDTSC命令を直に叩いて取得するのはどう?
ただし、CPUが複数ある場合、それぞれのCPUが別々にカウントしているので、
値がズレているので注意。
////////////////////////////////////////////////////////////////////////////////////////////////////////////SpecialSample2 // 全てのトップレベルウインドウを列挙し、情報を表示 ////////////////////////////////////////////////////////////////////////////////////////////////////////////SpecialSample2 //コールバック関数はWindowの数だけ呼び出されるので、 BOOL CALLBACK EnumWindowProc(HWND hWnd, LPARAM lParam) { if( IsWindowVisible( hWnd ) && GetWindow(hWnd, GW_OWNER)==NULL){ charpszWindowText[256]; charpszClassName[256]; //Windowタイトル取得 GetWindowText(hWnd, pszWindowText, sizeof(pszWindowText)); //クラス名取得 シェルの場合は「Progman」となる。 GetClassName(hWnd, pszClassName, sizeof(pszClassName)); DWORD dwProcessId; //WindowのプロセスIDとスレッドIDを得る DWORD dwThreadId = GetWindowThreadProcessId(hWnd, &dwProcessId); TRACE("pszWindowText = %s, pszClassName = %s dwProcessId = %d, dwThreadId = %d \n", pszWindowText, pszClassName, dwProcessId, dwThreadId); } return TRUE; } void CShareDlg::OnButton56() { //コールバック関数EnumWindowProcを指定してEnumWindowを行う。 EnumWindows(EnumWindowProc, NULL); //処理の流れがすっ飛んでしまうのだ。 }
//////////////////////////////////////////////////////////// // CTestDlg メッセージ ハンドラ BOOL CTestDlg::OnInitDialog() { CDialog::OnInitDialog(); // "バージョン情報..." メニュー項目をシステム ・・・ // TODO: 特別な初期化を行う時はこの場所に追加してください。 /////////////////////////////////////////// // 現在起動しているウィンドウの一覧を取得する // 自分の親、つまり、トップウィンドウを取得し、 // その一覧をリストボックスに入れる CWnd *pWnd = AfxGetMainWnd()->GetWindow( GW_HWNDFIRST); CString strwork; while( pWnd != NULL){ // オーナーがいない // 表示してるウィンドウ // タイトルがあるもの if( pWnd->GetOwner() == NULL && pWnd->GetWindowTextLength() != 0 && pWnd->IsWindowVisible() == TRUE){ pWnd->GetWindowText( strwork); m_lstWnd.AddString( strwork); } pWnd = pWnd->GetWindow( GW_HWNDNEXT); } return TRUE; // TRUE を返すとコントロールに設定・・・ }
72 :
デフォルトの名無しさん :2005/04/04(月) 11:20:09
画像を表示する時、ウィンドウハンドルの部分をNULLにしてもいいのでしょうか。 hDC = GetDC(NULL); hDCBack = CreateCompatibleDC(hDC); ReleaseDC(NULL, hDC); DeleteDC(hDCBack);
GetDCの解説を読め。
>>72 の質問を見て思い出したんですけど、GetDC() の場合はいいとして、
実際には NULL を指定できるのに、説明には書かれていないことってありますよね。
例えば、SetWindowText() の第2引数とか。
(a) SetWindowText(hWnd, TEXT(""));
(b) SetWindowText(hWnd, NULL);
厳密には (a) のように指定すべきだと思うのですが、(b) のようなコードもよく見かけます。
実は NULL を指定してもいいってどこかに書かれていたりしますか?
76 :
74 :2005/04/04(月) 14:00:51
>>75 どうもありがとうございます。
んー、確かに「NULL を指定しても問題はなさそうだ」ということは言えると思うのですが、
解説として明記されている箇所が見つからない限り、まだちょっと不安は残りますよね。
サンプルコードを書いた人が使い方を誤っているという可能性もなくはないですし…。
まあ、そんなことを言い始めると突っ込みどころが多くてキリがないんですが…。
タブページのタイトル上で右クリックされたとき、どのページのタイトルか判別する方法はあるでしょうか?
それはごく普通のタブ切り替えアクションじゃないのか?
79 :
51 :2005/04/04(月) 15:34:21
>>67 ,69
情報ありがとうございます。なるほど15ms間隔じゃキツいですね。
それと、重いってのはどうやら勘違い(表現違い)でした。
重いのではなくて、タイムスケジューラが作動している間はずっと
CPU使用率が常に100%になってしまってます。(音楽系ソフトです)
実際そんなに忙しくはないけど忙しそうに見える…みたいな感じで。
これってつまり、GetSystemTimeAsFileTimeが10msくらいの間隔で
サボってたっていう証拠なんでしょうか?計測した方がよさそうですね。
ちなみに最終的にはunix系のgettimeofday()にあわせて
timeval構造体のtv_sec, tv_usec(どちらもlong型)に変換してます。
このスレには勘違いをしている香具師がいるようです。 A 質問をろくに読まずにgoogleで調べてアドレス貼り付ける香具師 ←お手上げ B 的確な答えだが、偉そうに書いている香具師 ←人間的に(ry C 「調べろ」「勉強しなおしてこい」といった意味のないレス D 俺みたいな香具師
E 嘘テクを教える香具師 F 何でもかんでもAdvancedWindows嫁と言う香具師(俺 こんなとこで質問する暇があったらAdvancedWindows嫁よ
何を期待してるんだ?
一家に一冊AdvancedWindows 読者の声----AdvancedWindowsのおかげで競馬で連戦連勝です。
AdvancedWindowsのおかげで彼女も出来てウハウハです
AdvancedWindows のおかげで魔法少女になれました。
AdvancedWindowsのおかげで包丁裁きが前よりも良くなりました。
88 :
デフォルトの名無しさん :2005/04/04(月) 22:52:51 BE:67338645-#
あ っ そ
くまぼくじょ う
Win98DOS窓上でexeclp()してmoreなどに出力を渡していたコマンドが WinXPコマンドプロンプト上ではうまく動作しません。 コマンドプロンプトではどうしたらよいのでしょうか?
>>2 のWin32 API入門を参考にしながら
MDIアプリケーションを作っているのですが
ステータスバーの実装のところでつまづきました。
子ウィンドウには問題なくステータスバーをつけることができるのですが、
親ウインドウにステータスバーをつけようとすると子ウィンドウが開かなくなります。
メッセージ処理部分の
case WM_SIZE:
SendMessage(hStatus , msg , wp , lp);
をコメントにするとステータスバーは再描画されませんが
子ウィンドウはでるようになるのでこの部分が悪さを
しているようなのですが、どうすればいいのかがわかりません。orz
ステータスバーのウィンドハンドルって特殊なんだよたしか
93 :
デフォルトの名無しさん :2005/04/05(火) 11:54:33
GetObjectの第一引数が、HDCであるバージョンのがありましたら教えてください。
94 :
デフォルトの名無しさん :2005/04/05(火) 11:55:15
VerQueryValueで返ってくる言語コード(こういうやつ0x0401)を、 英語表記に置き換えたいのですが、対応表ってないのでしょうか? 結構調べてみましたが、みつかりません。
95 :
デフォルトの名無しさん :2005/04/05(火) 12:38:58
【質問】 .NET Frameworkって普及してるの?
>>93 何を期待してるのか知らんが、んなもんない。
97 :
93 :2005/04/05(火) 13:21:23
>>96 ありがとうございます。
グラフィック系Win32APIは、HDCに置き換えて作業するものが多いから、
グラフィック計ユーザー関数の引数に、HBITMAPではなくHDCで渡すものがあって、
HDCで出来たらなと思いました。
>>95 Windows Updateで、よくわからずにインストールしちゃってる人は多数いる予感。
俺は一度、馬鹿上司に、勝手にインストールされたことあるよ。
むやみにWindows Updateするだけでも問題なのに、なぜそんなものを入れるか、と。
素直に入れとけ
>97 GetCurrentObject?
101 :
93 :2005/04/05(火) 17:32:23
>>100 それっぽいです。ありがとうございます。
今ローカルにあるサーバと通信をするプログラムを作っているんですが、 ちょっと困ったことになりました。質問させてください。 Win32アプリからCreateProcess()でサーバプログラム(server.exeとしておきます)を 起動した場合と、コマンドラインからserver.exeなどと打って起動した場合で、 前者はレスポンスが早く、後者はレスポンスが遅くなってしまいます。 両者に何か違いはあるのでしょうか?原因がよく分かりません。。 通信の際に何か別の(OSの)プロセスを介しているから遅くなっているとか?
違いねぇ… 環境変数? あと、カレントディレクトリが変わるってのは?
デバッグビルドを動かしてるとか? さもなきゃ同名の別プログラムとか。
105 :
102 :2005/04/05(火) 18:33:55
お早い返事どうも。
>>103 レスポンスに影響しそうな環境変数というと何があるんでしょう?
カレントディレクトリはどちらも間違いなく同じ位置です。
そもそも、カレントディレクトリが間違っていれば
起動に失敗してしまうサーバですので。。
>>104 今確認してみましたが、これも間違いなく同じプログラムが動作してます。
実は言うと、そのサーバを起動するプログラム(MFC)は自分で作ったものではなくて
自分以外の人間が作ったものなんです。もしかしたら何か全く別の原因なのかも。
CreateProcess()の前に何か小細工でもしてあるんでしょうか?
ちなみに体感的に50msほどの遅れです。
106 :
デフォルトの名無しさん :2005/04/05(火) 18:35:50
0.05秒の差を感知できるお前は天才 と言う事で
プライオリティが高くなってるとか。
以前、wcharをcharに変換する事で質問したものですが、 その時にWideCharToMultiByteを使えばいい事を 教えて頂いて早速試したのですが、WideCharToMultiByteを使った場合、 wcharでUCS2だったものが、SJISに変換されてしまいます。 wcharをUCS2のままcharに変換できないのでしょうか? wcharから、上位8bit下位8bitずつとって自分でcharにする以外の方法はないのでしょうか?
109 :
102 :2005/04/05(火) 18:52:05
>>106 1桁間違えました。その10倍です。
>>107 タスクマネージャから優先度をリアルタイムに変えても同じみたいです。
他にも何かプライオリティを設定する方法があるんでしょうか?
今サーバにメッセージをダンプさせてみたところ、
サーバの処理速度が遅くなっているだけだったみたいです。
通信に関係ないとなるとますます謎です。
>108 何のためにwcharをcharにする必要があるんだ? UTF-16LE形式のままsendしたい、と言うような話なら、キャストして終わりだ。
>109 何が500ms遅れるの?
112 :
102 :2005/04/05(火) 19:04:29
>>107 あ、やっぱり優先度関係が濃厚っぽいです。
ProcessWaker使ってプロセスツリーの状態を調べてみたところ
コマンドラインから起動させた場合は、エクスプローラの下で
プロセスが起動しているのに対して、MFCアプリからの起動だと
全く別で、よりrootに近い方のノードから派生してました。
しかも前者が優先度42に対して後者は8になってました。これが原因ぽいです。
エクスプローラの外側に優先度の高いプロセスを生成するってどうやるんでしょう?
質問のレベルが低くてすみません。
113 :
102 :2005/04/05(火) 19:05:39
>>111 音声処理サーバなので、出音が遅れます。説明不足でした。
>>110 確かにcastで実現できたのですが、アスキー文字が0x00 0x20とかになってしまって・・・。
wcharをcharに変換するってかなりおかしな事なのでしょうか?
では、そのcharのcharsetは何なんだ。Shift_JISでは不満なようだが。
>>114 アスキー文字を1バイトで表現したいんなら、Shift_JISなりUTF-8なり
を使うべし。素人が変な符号化方式を設計しちゃダメだよ。
>>115 wcharのままのcharsetがいいのですが。
単にwcharを1byteずつ扱いたいんです。
何か私がとんだ勘違いをしているのかな????
118 :
117 :2005/04/05(火) 19:31:37
あれ、wcharのエンコーディングはUCS-2ですよね?
>>117 だから、char*にキャストすればいいやん。
アスキー文字が 0x20 0x00 みたいになることの何が不都合なんだ。
もうちょっと上のレベルで「なんでcharで扱いたいのか」を書いたほう
がいいよ。
>>118 で、なぜ0x00 0x60になるのが疑問なんだ?
違うよ。MSのwchar_tはUCS4のUTF-16。 その証拠にサロゲートペアがサポートされてる。
122 :
117 :2005/04/05(火) 19:41:47
すいません、渡しがいろいろと勘違いしてたようです。 顔洗って出直してきます。
123 :
117 :2005/04/05(火) 19:42:43
しかも、最後に誤字。鬱だ氏のうorz
124 :
102 :2005/04/05(火) 19:49:37
あ、プロセスツリーの位置もあんまし関係ないみたい。 特別なサーバプロセスとして起動させてるのかなとか思ってたけど…。 もし何か思い当たることがある方がいましたら、その時はお願いします。 もうすこし調べてみたいと思います。お騒がせしました。
126 :
121 :2005/04/05(火) 20:31:58
どのあたりが?
127 :
102 :2005/04/05(火) 20:41:33
>>103 環境変数の違いでした!バカだなオレ・・・。
::SetEnvironmentVariable()の行を見落としてました。
ほんとに助かりました。このご恩は一生忘れません。
サービスプログラムでユーザーの偽装を行った後に、ユーザの偽装を 行ったプロセスやスレッドが終了しても、対話的に操作をしている 人がユーザを偽装し続けるには、どうすれば良いですか?
>>126 UCS-4もUTF-16も文字符号化形式の一つだから並び立つ事がない点じゃない?
UCS-4はUTF-32と互換性の高い32(31)ビット固定符号化形式。
サロゲートペアはUnicodeの基本BMP面以外をUTF-16で表現する時に使用する仕組み。
130 :
121 :2005/04/05(火) 21:44:46
UCS-4は符号化文字集合(CCS)としての意味も持ちますよ。 「4オクテット正規形式は、4オクテットの符号化文字集合として使用でき、 この場合に、UCS-4と呼ぶ」(JIS X0221-1 5.国際符号化文字集合の全体構造)
>>130 君が本来、答えるべきはワイド文字のサポート領域ではなく、
WindowsAPIのUnicode版が返す文字だろう。
何しろ、このスレはWindowsAPIスレなのだから。
間違いを認めたくないのはわかるが潔い態度も必要だ。
おまえがな
「Windowsの事しか知らない厨房だから、それ以上の一般的なこと言われてもわかりません」 と素直に言え。
>>121 は消えろよ。これ以上荒らすな。
MSのwchar_tは、UCS-2LEだよ。cygwinのgnuは違う。
135 :
118 :2005/04/06(水) 02:15:41
やっぱ、UCS-2で合ってますよね? 結局のところどうなんでしょうか。 別にそんなに重要ではないのだけど。
SDKの範疇じゃないかもしれんが コントロールパネルのサウンド設定でWindowsの起動音とか指定できるが、 あれを独自アプリでやるにはどうすればいい?
137 :
121 :2005/04/06(水) 07:45:41
だから、サロゲートペアが出てくる時点で、CCSがUCS-2なわけねーのよ。 UCS-2はBMPしか使えないんだから。 まあ、サロゲートをサポートしない、NTとか9Xみたいなのは、 UCS-2といってもいいけど。 LEっていう限定もなぁ。WindowsはIntelの石だけで動く訳じゃなかったし。
>>136 HKEY_CURRENT_USER\AppEvents\Schemes\Apps
俺からみると121の言っていることが正しい。 WM_UNICHARの記述でも見れば?
ポップアップメニューってクライアント領域でしかでないですよね。 これをどこでも表示させるようなことってできないんでしょうか。 他とかぶるとまずいんで右クリック+ホイールとか特別な入力で。
ええー?desktopならどこでも出るよ?と思っていた
TrackPopupMenuなら画面上の好きな位置にメニューだしまくれるが?
グローバルなポップアップメニューって嫌だと思いつつ... SetWindowsHookEx
145 :
141 :2005/04/06(水) 14:35:05
すいません。説明のしかたが悪かったです。 ポップアップメニューの場所じゃなくて、それをだす方法です。 右クリックでそのアプリのポップアップメニューだせるのはクライアント領域だけですよね。 それをクライアント領域だけでなく、例えばどこでも右クリック+ホイールで自分のポップアップメニューを だすみたいな方法がないのかと思ったんです。
>>145 144の続き...
ただしSetWindowsHookExを使いこなすスキルがないのならば、
RegisterHotKeyで妥協できない?
こっちの方が楽だから。
147 :
141 :2005/04/06(水) 15:15:18
>>144 =146
丁寧にありがとうございます。
RegisterHotKeyのほうが簡単そうですね。Keyを使わないとならないのが痛いですが。
今いろいろと資料読んでます。
148 :
デフォルトの名無しさん :2005/04/06(水) 15:22:02
ディスプレイをスタンバイ状態にする方法を教えて下さい
>>146 必要なスキルや工数の少なさもさることながら、
自分がやりたい機能を十分に吟味すると、
RegisterHotKeyで十分な機能が得られるという結論に達することもあると思う。
というか、SetWindowsHookEx()による解決は大げさである場合が多いと思う。
OSはみんなのためにあることをお忘れなく・・・
ディスプレイケーブルを引っこ抜く
152 :
148 :2005/04/06(水) 15:26:07
すみませんそれは勘弁して下さい
PCをシャットダウンする
どうしても人を信用出来ない奴が一人いるようだな。
>>148 WM_SYSCOMMANDでSC_MONITORPOWER
156 :
148 :2005/04/06(水) 15:54:29
うー嫌なアプリだ
158 :
デフォルトの名無しさん :2005/04/06(水) 16:32:46
プライベートなクラスを持つダイアログボックスのウィンドウプロシージャの WM_CREATE に初期化パラメータを渡す方法があれば教えてください。 つまり、CreateDialog() 系のAPIが内部で呼び出している CreateWindowEx() の lpParam に NULL 以外の値を渡す方法を知りたいのです。
>>158 CreateDialogParam()
160 :
158 :2005/04/06(水) 16:51:53
>>159 レスをありがとうございます。
でも、ダイアログボックスプロシージャの WM_INITDIALOG ではなく、
ウィンドウプロシージャの WM_CREATE に初期化パラメータを渡したいのです。
念のため CreateDialogParam() も試してみたのですが、渡されたのはやはり 0(NULL) でした…。
>>160 なんでWM_INITDIALOGでは駄目なの?
>>160 キミの環境ではDlgProcでWM_CREATEを取得できるのかね?
163 :
デフォルトの名無しさん :2005/04/06(水) 17:36:11
Sleepって、コールしたスレッドだけとめるんだっけ?
意味和漢ね
Sleepして他のスレッドが止まったら大変だな。
使いどころ難しくてつかえねぇじゃんw
167 :
158 :2005/04/06(水) 18:01:21
>>161 WM_INITDIALOG が絶対に駄目というわけではないのですが、
何らかのエラーが発生したときに正当な手段ではウィンドウの
作成拒否(WM_CREATE に -1 を返すような動作)ができないことと、
DlgProc と WndProc の間でローカルな変数が共有しづらいという
事情があって、できれば WM_CREATE で初期化を行いたいのです。
>>162 DlgProc ではなく、WndProc の中です。ダイアログテンプレートで
CLASS 指定を行い、ウィンドウプロシージャを定義した場合の話です。
一般に「ダイアログベースのウィンドウ」と言われているやつです。
168 :
デフォルトの名無しさん :2005/04/06(水) 18:04:12
Sleepみたいな石鹸、花王石鹸ほわいと〜♪ コーヒーにはSleep
>>167 だからDlgProcでしょ?
例えばCreateDialogParamなら、
HWND CreateDialogParam(
HINSTANCE hInstance, // アプリケーションのインスタンスのハンドル
LPCTSTR lpTemplateName, // ダイアログボックステンプレートを指定します
HWND hWndParent, // オーナーウィンドウのハンドル
DLGPROC lpDialogFunc, // ダイアログボックスプロシージャへのポインタ
LPARAM dwInitParam // 初期値
);
WndProcではない。
>>169 >>167 が言ってるのは、ダイアログエディタで、
クラス名指定(リソースIDにあらず)したダイアログリソースを使って、
CreateWindowEx()で上記クラス名を指定して作ったウィンドウのことじゃない?
169の無知がばれた瞬間ですた
ちがうだろ
モーダルダイアログからモーダルダイアログを呼び出したいのですが、 どうしたらいいですか? MFCにはDoModal()ってのがあるのですが、 SDKでは
DialogBox()
175 :
158 :2005/04/06(水) 19:02:47
>>169 いえ、確かに CreateDialog〜() で指定するのは DlgProc ですが、
ウィンドウクラスを登録し、ダイアログテンプレートの CLASS にそのクラス名を
指定すると、自分で定義した WndProc が呼ばれるようになり、
そこに WM_CREATE も飛んでくるようになるのです。
ネット上で例を挙げるとするなら、↓ここに書かれている方法です。
ttp://wisdom.sakura.ne.jp/system/winapi/win32/win89.html もしペゾルド本をお持ちでしたら、11.2.3 から書かれている方法です。
>>170 だいたいその通りなのですが…ダイアログの作成は CreateWindowEx() ではなく、
CreateDialog〜() でおこなっています。ひょっとして、CreateWindowEx() に
ダイアログリソースを指定してダイアログを作成することができるのですか?
もしできるのなら、それで
>>158 はめでたく解決するのですが…。
>>175 ちょっと質問なんだが、CreatePropertySheetPageでもいける?
Old New thingで、Dialogの出来る仕組みが解説されてたから、 自前でテンプレートからコントロールをCreateWindowしてまわれればええんとちゃう?
179 :
158 :2005/04/06(水) 20:01:26
>>177 CreatePropertySheetPage() にも適用できますよ。
ていうか、質問者がいつの間にか回答者になってるし…w
>>178 なるほど、ありがとうございます。確かにそれならうまくいきそうですが…
私の中では最終手段という位置付けになりそうです。
マイコンピュータなどの特殊オブジェクトのドラッグ&ドロップを受け付けるウインドウを作成するにはどうしたらよいのでしょうか?
>>178 The Old New Thingだね。
でもそこの英語は読みづらくてかなわない。
182 :
デフォルトの名無しさん :2005/04/06(水) 20:28:45
>>180 COMを使うことになるんだが、とりあえず RegisterDragDrop て関数を
調べてくれ。
183 :
180 :2005/04/06(水) 20:54:03
184 :
デフォルトの名無しさん :2005/04/07(木) 03:22:51
ダイアログリソースを抜き出して参考にしたいのですがそういうツールはありますか?
たんに見るだけなら、VC++でも見れるよ。 実行ファイルを開くときにリソースを指定すれば、リソースを覗ける。
どちらに質問してよいのかわからなかったので、とりあえずこちらで質問させてください。 180さんの質問に近いかもしれません。 エクスプローラ(またはデスクトップ上)の任意のファイルを エクスプローラ(またはデスクトップ上)の任意フォルダに対して ドラッグ&ドロップした時に、ある特定の拡張子のファイルしかコピー(移動)させないような制御を 行うことは可能でしょうか。 制御としては、ドラッグでコピー(移動)できないようにする他に、 マウスカーソルを変更するなどを実装させたいと思っています。 現在VC++でCOMを利用して開発をしているのですがシェル拡張でいけるかなと思いきや、 そう簡単に行うことができず・・・。 宜しくお願い致します。
ファイルはエクスプローラ上にある訳ではないです
188 :
186 :2005/04/07(木) 12:53:18
>>187 あ、すみません。
お聞きしたいのは、エクスプローラからのイベント取得ではなく、
適当な場所においてあるファイルを、どこか別のフォルダに
ドラッグ&ドロップした時に何かイベントは取れないだろうか
というところです。
そのファイルとフォルダにはプログラムは介在していません。
わかりづらくてすみません。
ドラッグ&ドロップした時にイベントは取れますよ
191 :
186 :2005/04/07(木) 13:43:42
>>189 おおお!それはどのようなイベントが飛んでくるのでしょうか。
>>190 .NETには用意されているのですねー。
開発環境はVC++6.0なのですが、クラスライブラリは使用できるのでしょうか。
無知ですみません。
当初考えていたものはシェル拡張を使用する手法で、
ドロップハンドラを使用するものでした。
しかしこの場合、自作のアプリなどと連動させなければ(?)ハンドラが取れないため、
現在の所、うまくいかず頓挫しております。
常駐プログラムを増やしたくないので、プロセス監視などの方法は避けたいです。
>>191 FindFirstChangeNotification
ReadDirectoryChangesW
をMSDNで参照してみれ
ReadFile関数で 0123456 6543210 のtxtファイルを1バイトずつ読みこんで 配列に入れたいんですが 改行は'\n'で 0123456\n 6543210 15文字になるんですか?
やってみれば?
196 :
デフォルトの名無しさん :2005/04/07(木) 16:14:40
TreeCtrlの階層表示でチェックボックスをオンにする際に ルート項目だけチェックボックスを表示しないことってできますか? 教えてください。 (TreeCtrl全体にチェックボックス属性がつくため無理?)
コマンドラインの最大文字長を取得する方法はありますか?
200 :
デフォルトの名無しさん :2005/04/07(木) 18:48:52
DialogBoxでつくられたモーダルダイアログを親として モーダルダイアログをつくりたいのですが 普通にDialogBoxとやると固まります。 どうしたらいいですか?
>>200 リソースエディタから、リストコントロール内のポップアップとかチャイルドとかのウィンドウ属性を変更する。・・はず
202 :
デフォルトの名無しさん :2005/04/07(木) 18:57:27
>>199 MSDNでCreateProcess見たら、
> lpCommandLine
> The maximum length of this string is 32K characters.
> Windows�2000:��The maximum length of this string is MAX_PATH characters.
ってなってるけど、どうだろう。
>>191 ドロップハンドラの何がいけないのかが分からない。
というかそれしか方法はないはずだが・・・
>>203 >というかそれしか方法はないはずだが・・・
嘘を教えるなよ
>>203 ドロップハンドラでいけるならそれに越したことはないのですが・・・。
何かそれについてご存知でしたら非常に申し訳ないのですが教えてください。
任意のファイルを任意のフォルダにドラッグ&ドロップした時に、特定の拡張子のもののみコピー・移動を許可する。
つまりはWindowsがつかんでいるイベントを横取りさせてくれよというイメージなんですが、それは流石に無理ですかねぇ・・・。
常駐プログラムは存在しないので、常時そのフォルダを監視するのは無理です。
何かご存知の方がいらっしゃいましたら、重ねて宜しくお願い致します。
>>205 何を作ろうとしているのか良くわからないが...
例えば、エクスプローラからD&Dを実装した他のファイラへドラッグする、
もしくはその逆の場合、フックしたいということ?
エクスプローラからエクスプローラのD&Dを奪いたいんだろ。
対象を選ばずファイルのD&Dをフックしたいように読めたが。
>>208 >任意のファイルを任意のフォルダに
これは普通、エクスプローラでの操作ってことじゃね?
別のファイラを想定しているようには読めないんだが。
>>205 試してないがIDropTarget::DragEnterでDROPEFFECT_NONEを返せばいいのでは?
RegisterDragDropをDLL INJECTIONで横取って 自分のプロキシを介するくらいしかないな。
エクスプローラがRegisterDragDropを使っているとは限らな(ry
VB6でHDD→FDDへファイルコピーする際にエラーダイアログ抑制で
lngOldErrorMode = SetErrorMode(SEM_FAILCRITICALERRORS)
〜
lngWin32apiResultCode = SetErrorMode(lngOldErrorMode)
をしています。
しかし書き込み中(ランプ点灯中)にFDを取り出すと自プロセスからではなく
システムからのエラーダイアログ(タイトルバー「Windows - ディスクが準備されていません」)がポップアップされます
疑問:
(1)マシンによっては、このエラーダイアログがポップアップされない。
SetErrorModeとは別にエラーダイアログを抑制するレジストリ設定等があるのか?
(2)SetErrorModeをしても消すことができないエラーダイアログがあるのか?
(3)WinNT4.0ではそのエラーダイアログにフォーカスされているが、
Win2kではフォーカスがあたらずどっかへとんでいる。その理由は?
過去ログを検索した結果似たような質問
http://pc.2ch.net/tech/kako/1023/10233/1023361418.html がありますが解決に至っていないようです。
答えを知っている人、教えてください
SetErrorModeはプロセスが起こしたエラーを制御する。 書き込み中にFDを取り出した場合はOSレベルのエラーになる。 マシンによって動作が違うのはOSのバージョンが違うからじゃないかな?
>>214 できればプロセス及びシステムからのエラーダイアログをポップアップさせたくないのです。
(1)で記述したとおり、同じOSでもシステムからのエラーダイアログがポップアップされないマシンがあります。
システムからのエラーダイアログを抑制するレジストリ設定またはサービス設定などが存在するのでしょうか?
もうすでにAPIの質問じゃなくなってるがな
書き込み中にディスクを取り出さないなんて当たり前のことじゃないか。 そんなことする奴が悪い。
書き込み中に取り出しボタン押したら感電する装置
>>218 そう、当たり前のことなのです。わかりきっています
>>216 しかし(1)の現象を解決しなければ先へ進めません。
なぜ同じOSなのにシステムからのエラーダイアログがポップアップされたりされないのか?
その原因を究明し提示しなくてはなりません...orz
仕様です。
なんか、常駐してる別プロセスがいたんじゃないの?
>>222 そうですね。その可能性も疑ってはいるのですが。
レジストリやサービスの内容をWebで検索してもシステムからのエラーダイアログを抑制するような設定は見つかりませんでしたし……。
しかし別プロセスがエラーダイアログを抑制するケースはありえるのでしょうか?
……APIの質問から離れてしまってごめんなさい
224 :
デフォルトの名無しさん :2005/04/09(土) 11:38:33
>>223 VBのことはよく知らないけど、そのエラーメッセージってVBの
ランタイムが出してる可能性はないか?OSじゃなくてVBの話かも。
一応聞くけど、On Error〜とかでは処理できない?
>>226 やりたいことが違います。
私はHDD→FDDへのファイルコピーの際、FDを取り出すとSetErrorModeしていてもシステムからエラーダイアログが
ポップアップされるのでそれを抑制したいのです
>>225 のURL先での書き込みではFD内のセットアップアプリを起動の際、FDを取り出すとシステムからエラーダイアログがポップアップされるという内容です。
その対応策としてFDの内容をHDにコピーしてそこから実行をかけるというものです
>>227 Ejectボタンのない(SoftEjectな)FDDを使う。
>>228 そうですね。そういうハード的な解決もありだと思います。
しかし「プログラムでは対応できません。だからハード的な解決しかありません」と
言えるような根拠がほしいのです。
>>214 >>216 で記述したように、同じOSでもシステムのエラーダイアログがポップアップされるされないがあるため、
その原因を究明しない限りハード的な解決方法への転換ができないのです
>>229 同じOS、同じOSと繰り返すが、OSのバージョンとハードウェアを特定しないと話が進まないぞ。
>>230 すみません。現象を確認したOSは
Windows2000(SP4)
WindowsNT4.0(SP6a)
です。
ひとつのOSに限りシステムからのエラーダイアログがポップアップされるされないではなく、
マシンによって異なるのです
IShellView::CreateViewWindowで作成したウィンドウの閉じ方なんですが
ttp://www.codeproject.com/shell/explorer.asp では、
PostMessage(CreateViewWindow()で得たハンドル, WM_QUIT, 0, 0);
IShellView::UIActivate(SVUIA_DEACTIVATE);
IShellView::DestroyViewWindow();
IShellViewインターフェースのRelease
とやってます。
UIActivateはSVUIA_DEACTIVATEの説明みて納豆君なのですが
WM_QUITをpostするということはMSDN探しても見つかりませんでした。
試しにWM_QUITをpostしないようにすると、メインウィンドウが閉じても
プロセスが終了しなくなったので必須なようです。
このことを説明してるところはないでしょうか?
IEが現在表示しているアドレスはどのように取得すればいいですか?
234 :
デフォルトの名無しさん :2005/04/09(土) 20:20:12
プロセスが起動されたときに、OSから通知を受けることは可能でしょうか?
誰が?
任意のプロセスが起動されたときに、 私のプログラムが通知を受けたいのです。
237 :
デフォルトの名無しさん :2005/04/09(土) 21:03:15
二重起動の防止の方法って、 (1) FindWindow() でウィンドウの検索 (2) ミューテックスを作っておく というのが定石だと思いますが、 ウィンドウを使わないプログラムでは (1) は使えない、 また、二重起動の防止のためだけにミューテックスを使いたくない。 ということで、自分の実行ファイル名と同じ名前のプログラムが 2つ以上起動されていれば、二重起動だ、という判定法のほうがありえるなー。 どうだろう?
プロセスリストを取得してゴニョゴニョするより 余程Mutex使った方が無駄がないと思うがどうだろうか。
>>238 ゴニョゴニョは起動時だけだが、
ミューテックスは終了するまで常時存在する。
起動を早くしたいのでなければ、ミューテックスのほうが無駄だろう。
システムリソースを保持しつづけるからって無駄ことね。 それなら、どうぞ起動時にお調べください。
起動時にプロセスリストを調べるコードが占めるメモリ と ミューテックス1個
Mutexを使った多重起動防止には穴がなかったか。
Mutexは名前がかち合う可能性がある
同じ名前のMutexを生成するキラーアプリを常駐させておけば 嫌いなアプリの実行防止ができる
実行ファイル名の判定方法は、別パスにコピーしたものは判定できないってのがあるね。 ファイル名部分だけだと、名前がかち合う可能性があるかと。
DLLの参照カウントを使うのがベストかな
ほぼ同時に複数のプロセスが起動された場合 プロセスAがMutex存在確認>存在しないので起動処理 プロセスBがMutex存在確認>存在しないので起動処理 プロセスAが起動処理でCreateMutex プロセスBが起動処理でCreateMutex という順番で処理されてしまうと同時起動してしまうとかだったような気がするんだが。
>>249 おまえはCreateMutexの戻り値を調べないのか
>>249 それ、OpenMutexを使ったいわゆる間違った多重起動判定方法。
正しくはいきなりCreateMutex使って、戻り値がERROR_ALREADY_EXISTSかを判定する。
252 :
251 :2005/04/09(土) 21:57:09
戻り値じゃなくて、GetLastErrorがERROR_ALREADY_EXISTSの間違い。orz
>>214 2000から、フォーカスが勝手に移動しないように、仕様が変更されています。
処理順がわかりません。 WM_CREATEの処理で TrackPopupMenu(hMenu, TPM_TOPALIGN | TPM_LEFTALIGN, curPos.x, curPos.y, 0, hWnd, NULL); PostMessage(hWnd, WM_CLOSE, 0, 0); これで"WM_COMMANDの処理->終了"と思っていたんですが WM_COMMANDの処理はされず終了してしまいます。 TrackPopupMenu SendMessage(hWnd, WM_CLOSE , 0, 0); だと"WM_COMMANDの処理->終了"となるんですがなぜそうなるのかわかりません。 TrackPopupMenu PostMessage(hWnd, WM_CLOSE, 0, 0); PostMessage(hWnd, WM_USER + 1, 0, 0); だと"WM_USER + 1->終了"になり TrackPopupMenu PostMessage(hWnd, WM_CLOSE, 0, 0); MessageBox(NULL, "10", "情報", MB_OK); PostMessage(hWnd, WM_USER + 1, 0, 0); だと"終了"になります。
「キラーアプリ」という言葉の使い方を間違っている香具師がいる件について
258 :
デフォルトの名無しさん :2005/04/10(日) 02:00:11
仮想キーコードの値から名前を取得するAPIはないでしょうか?
>>255 2000で試した結果。
1番目
WM_COMMANDが来た後WM_CLOSE。
TrackPopupMenuはWM_COMMANDをpostするようだ。
で、その後WM_CLOSEをpostしたのだから
メッセージキューに入れられた順に取り出されてるので予定通り。
2番目
WM_CLOSEの処理のみ。CreateWindowが失敗する。
WM_CLOSEがsendされその先でDestroyWindow()されウィンドウ破棄。
キュー中の自分宛メッセージ(WM_COMMAND)は破棄される。
3番目
WM_COMMAND->WM_CLOSE
WM_CLOSEでDestroyWindowされるため、その後のWM_USER + 1は破棄された。
4番目
WM_COMMAND->WM_CLOSE->CreateWindowが失敗する。
TrackPopupMenuがWM_COMMANDをpostし、WM_CLOSEをpost。
MessageBox中のメッセージループがWM_COMMANDを拾い処理。
さらにWM_CLOSEを拾いDestroyWindow。
親が破棄されるのでメッセージボックスも破棄される。
(TrackPopupMenuが返ってからWM_CLOSEが来るまで一瞬なので、メッセージボックスがチラっと見えるだけ)
260 :
255 :2005/04/10(日) 03:39:05
MessageBoxの中のメッセージループがWM_CLOSEなどを処理していることに気が付きませんでした。 MessageBoxを使っていたのが悪かったみたいです。 ありがとうございました。
261 :
232 :2005/04/10(日) 14:11:41
理由がわかりました。 IShellViewのDestroyViewWindow()をするとpostしたWM_QUITがメッセージキューからなくなり メッセージループが終わらないためプロセスが終了しなかったようです。 DestroyViewWindow()したあとにPostQuitMessageを入れることでちゃんと終了するようになったけど なぜDestroyViewWindow()がキュー中のWM_QUITを消すのか このことが書かれた資料は見つかりません・・・
他のプロセスのソケット通信を盗むにはどうすればいいですか?
RAWソケットをフックするドライバ書く お前には無理
>>262 DLLをどの順で探すか、ということを勉強すれば、やり方がおのずとわかる。
なんかぐぐっても出てこないんで質問します ZeroMemory(&obj,sizeof(obj); って何する関数なんですか? どっか載ってるサイトがあったらお願いします
すみません、ヘルプ見たら載ってましたorz
267 :
デフォルトの名無しさん :2005/04/10(日) 18:11:55
知ってるからそう思うだけだ
試してみれば一目瞭然だな。
bzeroのほうがわかりやすいよね。
いや、全然。
○| ̄|_
誘導されてやってきました 今ファイラー作ってるんですが右クリックを押したままドロップすると 表示されるコンテキストメニューはどうやったら表示できるんですか
278 :
デフォルトの名無しさん :2005/04/11(月) 08:45:49
StretchDIBitsってやつで、ビットマップを印刷してますが、真っ黒になるときがあります。 対処方法はありますか?
280 :
278 :2005/04/11(月) 09:00:01
1台のプリンタだけなんで、バグじゃないと思うんですが。 ところで、画面のビットマップを取るとき、BitBltだと同じカラーですが、 減色するにはどうしたら良いですか?
自分で減色汁。
279=281=書くまでも無いことをわざわざ書くのはナゼ?
>>282 ここもDirectX初心者スレみたくなってきたな
285 :
デフォルトの名無しさん :2005/04/11(月) 16:37:27
キーボードの状態を取得する関数でGetKeyBoardState関数がありますが、これはこれを呼び出したスレッドでしか 監視しないんですね。 自スレッドにフォーカスが無い状態でのキー操作も監視したいのですが、メッセージをフックするいわゆる「通知型」ではなく、 自分で任意のタイミングで検出しに行く方法を取りたいのですが、GetKeyBoardStateの代わりに代用できるAPIって、やっぱりないですか?
フックをかけるDLLを作成し、 任意のタイミングでDLLに問い合わせを行えばいいのでは?
>>262 > 他のプロセスのソケット通信を盗むにはどうすればいいですか?
WinPcap ライブラリを使う。
>>285 よく知らんのでキーワードだけ。
GetAsyncKeyState
AttachThreadInput
とかどう?
289 :
285 :2005/04/11(月) 18:47:38
説明が不足していた様ですので。。。 たとえば、ゲームパッドなんかだと、似たような処理をする場合フォーカスとか関係なしに判定できるじゃないですか。 ただ、GetKeyBoardStateだと自分にフォーカスが無いとキーを押してもシカト?っていうのを、何とかしたかった、という。 286さんのやり方は確実そうなのでそうしてみます。 回答していただいた方ありがとう。
IDirectInput
ほかのアプリのウィンドウをアクティブにする方法ってやっぱりSetWindowPosが一番適当なのでしょうか? いろいろフラグを入れ替えてやってみてるのですがうまくアクティブになりません・・・。
SetForegroundWindow
Microsoft的に、勝手に(ユーザの入力なく)他のウインドウがアクティブになる のは困る、ということで、SetForegroundWindowの仕様が変更されて、 前面には出なくなったんだよね、たしか。
294 :
デフォルトの名無しさん :2005/04/11(月) 23:45:07
>>294 CryptAPIは使ったことないのでそのサンプルを見て想像で答えるけど、
MD5は署名の入力のハッシュのアルゴリズムであって、署名のアルゴリ
ズムはRSAじゃないの?
>>293 抜け道があるよ。
ずーっと何も入力しないでアイドルが続いた場合には、
SetForegroundWindowした時に、従来のように前面に出るようになってる。
それを悪用する。
アイドル時間の設定を0秒にしてから、SetForegroundWindowを呼ぶ。
んで、すぐに設定を元の値に戻す。
ただ、これでもうまくいかないこともあったような・・・。
具体的なコードは、以前に書いたものをなくしてしまったので、出せなくてごめん。
298 :
デフォルトの名無しさん :2005/04/12(火) 08:17:05
ファイルのパスからファイルのディスク上のサイズ(Exploreで右クリックしてプロパティで表示される値)を取得するにはどうすればいいですか?
300 :
デフォルトの名無しさん :2005/04/12(火) 09:55:34
他スレでもきいたのですが、ここで聞いたほうがいいとのことで このスレで聞きます。 非アクティブ状態のメインウインドウで、ジョイパッド の状態を取得したいのですが、わかりません。 ちなみにアクティブ状態ならジョイパッドを使用できる 状況にあります。
DirectInput使えば?
>>299 >298は「ディスク上のサイズ」と言ってるが。
ファイルサイズを超えるクラスタサイズの倍数とかいわないようにね。 圧縮ファイルシステムを使った場合に当てはまらないから。
すまんかった。使ったこと無いけどGetCompressedFileSizeでどうだい?
一発で求めるAPIあるのかな・・・ GetFileAttributes辺りで圧縮されてるかどうか調べて、 GetCompressedFileSizeじゃダメかな? 通常のファイルのクラスタサイズ云々は、 SetupQuerySpaceRequiredOnDriveで何とか
スパースファイルもあるでよ
>>294 ただのMD5ハッシュなら、CryptCreateHash して CryptHashData でデータを追加して、
CryptGetHashParamでハッシュ値を取得、CryptDestroyHash, だよ。
308 :
291 :2005/04/12(火) 14:01:20
>>292 ,293,296,297
みなんさんレスありがとうございます。
SetForegroundWindowつかてみるとなぜか普通にアクティブになりました・・・。
以前ためしたときはうまくいかなかったのですが、なぜかできちゃいました。
でもヘルプよむと
>この旧バージョンからの変更により、アプリケーションは、ユーザーが他のウィンドウで作業しているときに
強制的にフォアグラウンドウィンドウを設定することはできなくなりました。
ってかかれてたんでこれのことでしょうか。なにか入力などをしているときには強制的にアクティブにできないということでしょうか。
これからまた不具合でてきそうですが・・。
309 :
302 :2005/04/12(火) 14:01:26
私も興味を覚えて調べてみたけど適当なAPIはないねぇ。 つーか、こうなると>298がそれを知りたい動機次第かな。
>>308 どういう条件かはヘルプの解説に書いてるだろ。
回避策はGetForegroundWindowでぐぐれば出てくる。
311 :
デフォルトの名無しさん :2005/04/12(火) 16:33:29
すいません、他で質問したんですがなかなかレス頂けないので失礼します。 リソースエディタで作ったダイアログの枠の大きさを その中に配置されたコントロール群より小さくしたとき、 スクロールバーでスクロールさせてきちんと全体を見渡せるようにしたいんですが、 ダイアログのプロパティでスクロールバーを付けてるのに上手く機能しません。 スクロールバーをドラッグしても、離した瞬間に上とか左側に戻ってしまいます。 ウィンドウスタイルで何か指定する必要があるのか、 それともなにか手動でメッセージを送るとかする必要があるでしょうか? どうしたらよいか教えてください。
>>311 スクロールバーを動かしたときスクロールするコードを自分で書かなきゃだめよ。
>>312 マジですか!?それは面倒ですね…
MFCのウィザードとか使った場合はそのへんは自動化してくれたりするんでしょうか?
SDK卒業した方がいいのだろうか…
ありがとうございました。。
314 :
311 :2005/04/12(火) 16:53:17
>>312 あ、でもコントロールとして中に配置したりしたスクロールバーじゃなくて、
ダイアログ自体のスタイルとしてのスクロールバーなんですが、
それでも、ですか?
316 :
311 :2005/04/12(火) 17:00:25
そうですか、わかりました。ありがとうございました。
317 :
294 :2005/04/12(火) 17:46:10
CryptAPIの件アドバイス有り難うございました。 アドバイスから色々試行錯誤して何とかMD5ハッシュらしき物は得られるようになりました。 しかし、Linux の md5sum が出力したHASHと自作のプログラムのHASH値が異なります。 再度アドバイス頂けないでしょうか? HCRYPTPROV prov; HCRYPTHASH hash; BOOL bSuccess; BYTE rgbResult[16]; char str[100]; int i; DWORD cbResult = sizeof(rgbResult); bSuccess = CryptAcquireContext(&prov, NULL, NULL, PROV_RSA_FULL, 0 ); bSuccess = CryptCreateHash(prov, CALG_MD5, NULL, 0, &hash); memset( &str, 0, 100 ); sscanf( "abcdef", "%s",&str ); bSuccess = CryptHashData(hash, str, sizeof( str ), 0); bSuccess = CryptGetHashParam(hash, HP_HASHVAL, rgbResult, &cbResult, 0); if( bSuccess ){ for(i=0;i<cbResult;i++){ wsprintf( &str[i*2],"%02x",rgbResult[i] ); } printf("%s\n", str ); } CryptDestroyHash(hash);
>>317 どんなふうに異なるんかな? 実例をどうぞ。
つか、MD5ぐらいならRFCのソース丸パクリでいいじゃないか。
linux の方でも100バイトのファイル作ってますか? そううじゃないなら、 bSuccess = CryptHashData(hash, str, sizeof( str ), 0); を bSuccess = CryptHashData(hash, str, strlen( str ), 0); に変えてみたら?
321 :
294 :2005/04/12(火) 18:18:37
>>320 > bSuccess = CryptHashData(hash, str, strlen( str ), 0);
>に変えてみたら?
ありがとうできました!!
文字列もsizeofで良いと思っていたので全く疑ってませんでした。
とても勉強になりました。
文字列とバイナリデータの区別が付いていなかったのか……
Eドライブのファイルを全部消す。 とかが出来るAPIとかクラスってないんですかね? ファイル名指定するのしか見当たらないんですけど。 単純なようで複雑な処理が必要なのかな。
FindFirstFileとFindNextFileで回せ。
ShellExecute(NULL, TEXT("deltree /y e:\\"ってやれば楽チン。 クイックフォーマットでもいいと思う。
100回死(ry
そうかCreateProcessじゃないとコマンドプロンプトのウィンドウが隠せないな。 NT系にはDeltreeが無いかわりにRDに/Sを付けると同じことになるのか。 いや、そういう問題じゃないってのはわかっているよ。
ShellExecuteExでも出来るぽ
330 :
デフォルトの名無しさん :2005/04/12(火) 23:18:28
fread/fwriteで読み書きできるファイルサイズの上限ってあるのでしょうか? また、上限はOS(XPと2000で違うとか)に依存しますか?
331 :
デフォルトの名無しさん :2005/04/12(火) 23:20:57
2つのプロセス間でSendMessageを使って構造体を 渡すことってできますか?
>>324 シェル系ので出来ないかなあ。
今、調べられないから完全に思いつきまで。
>>330 ある。ファイルシステムと開発環境に依存する。
OS依存はないと思う。
335 :
330 :2005/04/13(水) 00:24:48
>>334 BCCとNTFS5の場合には2TバイトまでOKという理解で良いでしょうか?
>>324 SHFileOperation で出来そうな気がする。
ワイルドカードも使えるみたいだし。
>>335 ヘッダ見てみたけど、BCC 5.5.1だったら、2GBまでじゃないかなぁ。
fseek等使わないで、freadやfwriteのみでなら2TBまで出来るかもしれんが。
>>330 Win32 APIにはfread/fwriteは存在しません!!!
そんなこともわからないのかよ。
だから、自分でMSDNライブラリで調べられないんだよ。
339 :
デフォルトの名無しさん :2005/04/13(水) 02:42:53
Excelを引数付きで起動したいんですけど、Excelがインストールされているパスを取得するAPIってあります? 『C:\Program Files・・・』で固定するとかだめだし、excel.exeをFindFileするとかもあまりスマートじゃないかと。 #一応、レジストリを見たらなんとなくは解るんですが、バージョンによって格納されている場所が違う気がします。 私はOffice2000パーソナルしか持ってないんですが、他のバージョンにも対応したいと考えているのです。
ええけつしとるのぉ(*´Д`)ハァハァ うはっwwwおkwww??
freadのソースによると内部でどれくらい読み込んだかとかを unsigned で勘定しているので2GBまでではないでしょうか?
>339 Excel.ApplicationをCOM経由で起動させた方がいいとおもうが。
>>338 なぜそんな細かいことを気にするのですか?
たまにスレタイからはずれた質問が投稿されてしまうことが
そんなに気に入らないのですか?
「スレ違いですよ」と正しいスレに誘導でもしてあげれば済むのに。
>341 freadを一度呼んだときに、読み込める最大のサイズが2GBということだろう。 というか、32bitプロセスではそんなメモリの確保はほぼ無理だが。
>>339 せこいけど、COMの設定のレジストリを見ると、モジュールのパスが書いてあるので、
たぶんそこと同じにあると見なして・・・
>>343 わからないかなぁ。
>>341 さんが書いているように、fread/fwriteの仕様を確認すればいいのよ。
MSDNライブラリでCランタイムのマニュアル見ても書いてないので、
ソースを読まなきゃわからない。そしたら、ReadFileとかWriteFileに辿り着くでしょ。
347 :
デフォルトの名無しさん :2005/04/13(水) 08:47:12
猫に聞け。
>347 WPARAMとかのサイズが変わったとかその辺の話かも。
サービスプログラムを作ってます。 CreateService関数で登録は出来るのですが、管理ツールの 「サービス」で表示される「説明」欄にプログラムから文字列を 登録するにはどうしたら良いのかわかりません。 教えてエロい人
351 :
デフォルトの名無しさん :2005/04/13(水) 13:12:24
知ってるけど、俺、エロくないんだ ゴメンな、教えてあげる権利なくて
>>350 行儀が悪くて良ければレジストリに直接書きに行けばいいと思う。
他のサービスのレジストリを見れば、だいたいわかる。
>>350 MSDN LibraryのCreateServiceの説明のSee Alsoの中にあるそれらしい名前の
APIを調べてみる。なんとかConfig2とか。
>>347 Win16とWin32ではWPARAMとポインタ・ハンドルが32bit化されたので渡され方が違っているメッセージがある。
メッセージクラッカーを使えばWin16と32とで同じように扱えるように違いを吸収している。
例えばWM_COMMANDではHANDLE_WM_COMMANDの中身は違うがコメントのハンドラ関数の宣言は全く同じ。
/* void Cls_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify) */
Win16
#define HANDLE_WM_COMMAND(hwnd, wParam, lParam, fn) \
((fn)((hwnd), (int)(wParam), (HWND)LOWORD(lParam), (UINT)HIWORD(lParam)), 0L)
Win32
#define HANDLE_WM_COMMAND(hwnd, wParam, lParam, fn) \
((fn)((hwnd), (int)(LOWORD(wParam)), (HWND)(lParam), (UINT)HIWORD(wParam)), 0L)
だからメッセージクラッカーを使っていればWin32用に書き直す手間がその分だけ省けたということ。
356 :
デフォルトの名無しさん :2005/04/13(水) 21:02:44
SDKで開発。タスクバーの上で右クリックしたらポップアップを出したいのですが どのあたりで通知を受け取れるか、または判定すべきか教えてください。 WM_NOTIFYとWM_CONTEXTMENUに何か来てるようですが、ボタンを識別する方法が分かりませんでした。
コマンドプロンプトに貼り付けできるAPIありせんか? SendMessageのペーストだと(テキストボックス等じゃないから)出来ないみたいで…
あります。
360 :
357 :2005/04/13(水) 22:24:30
いやです
教えなくても助からないだけなので別にいいや。
363 :
357 :2005/04/13(水) 22:51:03
WriteConsoleInput
366 :
357 :2005/04/13(水) 22:56:31
>>364 あのバカだから質問してるんですけど。。。
バカって言った方がバカなんですよ
367 :
デフォルトの名無しさん :2005/04/13(水) 23:05:42
SignalObjectAndWaitがWin98、Meにもあるような話がWeb上に あったので、動かしてみたら、即座に「1」を返して来やがった。 GetLastErrorしてみたら、ERROR_CALL_NOT_IMPLEMENTED。 エントリーがあるだけってか。勘弁してくれ。
( ゚д゚)ハァ?
371 :
356 :2005/04/14(木) 04:34:12
やばい。
>>356 はタスクバーではなく、ツールバーのことでした。
なんか荒れてますが、いつもこうなんですか。
>>366 バカは質問の仕方が下手だから、結局答えを引き出せない。
>>372 馬鹿の国から馬鹿を宣伝しに来たような見事な馬鹿。
>>374 馬鹿の一つ覚えのように 「バカ」 が使用されている。
| 360 名前: 357 [sage] 投稿日: 2005/04/13(水) 22:24:30
|
>>358-359 | すみません、APIの名前教えて頂ければ助かります。
| 363 名前: 357 [sage] 投稿日: 2005/04/13(水) 22:51:03
|
>>360 | いやです。
| ってか名前を知らない
(;´Д`)
377 :
デフォルトの名無しさん :2005/04/14(木) 12:12:38
∧∧ ミ _ ドスッ ( ,,)┌─┴┴─┐ / つ. 馬 鹿 │ 〜′ /´ └─┬┬─┘ ∪ ∪ ││ _ε3 ゛゛'゛'゛
∧∧ ミ _ ドスッ ( ,,)┌─┴┴─┐ / つ ぬ る ぽ │ 〜′ /´ └─┬┬─┘ ∪ ∪ ││ _ε3 ゛゛'゛'゛
∧∧ ミ _ ドスッ ( ,,)┌─┴┴─┐ / つ が っ ! │ 〜′ /´ └─┬┬─┘ ∪ ∪ ││ _ε3 ゛゛'゛'゛
381 :
デフォルトの名無しさん :2005/04/14(木) 17:11:08
代替の構成−ユーザの構成(固定IP)の取得方法がわからん。
この流れだと「あら、そうですか」って返ってくると思われ。
あら、そうですか
あれま、そうでつか。
あらま、そうでつか。 = でかまら、あつそう。
でかまら、あつそう。 = うそ、まらでかあつ。
case WM_PAINT: hdc=BeginPaint(hWnd,&ps); GetClientRect(hWnd,&rect); for(nX=0;nX<=rect.right;nX++){ for(nY=0;nY<rect.bottom;nY++){ color=RGB((nX*0xFF/rect.right)*(nY*0xFF/rect.bottom),nX*0xFF/rect.right,nY*0xFF/rect.bottom); SetPixel(hdc,nX,nY,color); と入力したらすさまじい幾何学(?)模様がうかびあがってきました。 なんじゃこりゃああああ。
うそ、まらでかあつ。 = かつまで、あらそう。
>>388 スマソ。大発見を書きたかったのか質問なのか判別できん。
そうですか
いや、日記だな。
今コンソールアプリ(コマンドプロンプト上で動くプログラム)の フロントエンドを作ろうとしています。 教えて欲しいのですが、コマンドプロンプト上のメッセージを取得して ウィンドウ上のエディットボックスなどに表示させる ということは可能でしょうか? また、コマンドプロンプトを起動させずに(またはタスクバーに 表示させないように)コンソールアプリを実行させることはできるでしょうか? 環境はWindows XP、Visual C++.net 2003です。 お願いします。
アプリケーションの標準出力への出力をエディットボックス等に出力することは可能だがコマンドプロンプトに出力されてしまったものでは無理。 後者は余裕で可能。
>>393 ありがとうございます。
すみません、書き方悪かったですね。
もし可能であれば、その方法か、または使用すべきWin32 APIを教えていただけますか?
395 :
392 :2005/04/15(金) 00:14:43
GetStdHandle()のようなAPIがあるようですね。
もう少し自力でがんばってみます。
>>393 ヒントになりました。ありがとうございます。
396 :
デフォルトの名無しさん :2005/04/15(金) 01:07:13
/::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\ /:::::::::::::::::::ノ ̄ヘ::::::;―、::::::::::::::::::::::::ヘ /:::::::::::;-' ̄  ̄  ̄ヘーァ:::::::::i i:::::::::彡 ミ:::::::::::ヘ |:::::::メ ........ ......, ヾ:::::::::::| |:::ノ / ヽ / ヽ ミ::::::::::| |::| / _ _ ヾ::::::l |::| イ(:::)ヽ イ(:::)メ |::::::| |ノ i `ー'ノ i ヽ` ~ イ::イ | j } ~~ ノ; い ゝ:.:.{: . : . γ ,、 )、 i丿 厶:.:.ヾ : . ` ''` ~ ヽ ノつ /i:.:.:.:. : . ,_ i / / ヘ:.:.:. : . i ハニエ!-!‐ヽ | ,イゝ、__ /| ヘ:.: . │〈.:.:.:.:.:.:.:.:.:.:ノ ノ / \:;:- 、 _ /:;:;:;:;ヽ ヽ ! ヾエエEァ´ / i:;:;:;:;:;:;:;\ /:;:;:;:;:;:;:;:;:;:ヽ \ ゝ、::::::::::: ' ノ |:;:;:;:;:;:;:;:;:;:;ヘ /:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;ヽ \ / /:;:;:;:;:;:;:;:;:;:;:;:;:;i :;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:ヽ ` ー--― ' /:;:;:;:;:;:;:;;:;:;:;:;:;:;:;:;ヽ :;:;:;:;:;:;:;:;::;:;:;:;:;:;:;:;:;:;:;:;:;:;:;\ /:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;;| 質問にまともに答える気のない奴は質問スレに居座るな さっさと引っ越〜し♪♪しばくぞッッ♪♪♪♪
まともに質問できないからそうなる
まともな質問じゃない場合はどうすればいいんだ?
>>392 コンソールのハンドルが取れるなら
ReadConsoleOutputCharacter あたりでなんとか出来そうなきもすい
401 :
デフォルトの名無しさん :2005/04/15(金) 21:30:38
Word にビットマップ画像を挿入して、編集したいです。 オブジェクトの挿入で「ビットマップ」を選択すると、 Windows に付属のペイントで編集できるようになりますが、 他のソフトで編集はできないのでしょうか? Word にビットマップ画像オブジェクトを挿入して、 フリーのペイント系ソフトで編集できるようにすることはできますか? そのソフトが OLE 対応していないと無理でしょうか。
402 :
401 :2005/04/15(金) 21:42:55
追記: 誤爆じゃないです。 レジストリをいじればできるとか、 こういう API を使ったツールを作ればできるとか、 そういう裏技があれば、教えていただければ、と。
>>392 パイプを使うんだよ。
難易度高いけど、がんばって。
ドラッグアンドドロップについてです。 DragAcceptFiles()関数でドロップを許可したあと、 DragFinish()関数を使わずに次々にドロップしてくいくと、どんどんメモリが食いつぶされていくんですか? また、DragFinish()関数でメッセージを処理するまで、ドロップしたファイルの情報はメモリ上にあると保証されることになるんでしょうか?
405 :
デフォルトの名無しさん :2005/04/16(土) 00:49:02
質問があります。 チェックするために、何度も実行→処理→確認→終了→実行→を繰り返していると、画像の描画の時、急に描画が遅くなることがあります。 これは、CPUに負担をかけすぎと言うことなのでしょうか? また、この現象の対処法はありますか? お願いします。
>>407 チェックって何?
実行って何?
処理って何?
確認って何?
終了って何?
実行って何?
つまり 詳しく
>>311 お解りになりませんか?
日本の自動車業界の躍進が、逆に自らの首を絞めることに
なりかねないと言っているのです。
トヨタなど日本の自動車メーカーの快進撃が続く一方で、
来週には退潮が著しいGMも決算発表を予定しています。
GMの業績不振により、米国で保護主義的な政策論が勢いづけば、
日本企業が標的になるとの懸念も急速に増すことでしょう。
その上、GMやフォードの社債格付けが投機的等級に格下げされれば、
米債券市場で社債から米国債へと質への逃避が起きるでしょうから、
金利動向も読みにくくなります。
すみません、誤爆しました。
味わい深い誤爆だな。
オレって言われてもどれか分かりません
オレ=ぬるぽ
もしかして
>>408 みたいなくだらんカキコのこと?
おまいらのレス見ると、2chってほんと暇人の集まりだとよく分かるよ。 俺もその中に入ってるんだがね。
>>426 そういう自覚ある人ばかりだといいね。俺も自覚はしてるつもりだよ。
InvalidateRect()とValidateRect()って何が違うんですか? 無効領域を有効化ってのがよくわからないんですが
全然違うだろうに・・・ WM_PAINTあたり良く嫁
InvalidateRect()が無効な領域を作ってWM_PAINTメッセージが出て ValidateRect()は無効領域があったら有効化するんですか?
>>428 無効領域の意味もわからないし、有効化の意味もわからない、ということですよね。
InvalidateRectで指定された矩形(あるいはウィンドウ全体)は、「無効領域」として記録されます。
自分のスレッドの所有するウィンドウに無効領域があると、次回そのスレッドで GetMessage を
呼び出したときに、他に処理すべきメッセージが無ければ、WM_PAINT メッセージが生成されます。
んでアプリはWM_PAINT メッセージ処理でBeginPaint を呼び出して、その無効領域の画面を更新し、
EndPaint を呼び出すと、無効領域はなくなります。
ここまでがWindowsの画面更新処理の基本。
InvalidateRectしなくても、ウィンドウを動かしたりしたときには自動的に無効領域が生成される。
ウィンドウ(またはその一部)の表示を更新したいからWM_PAINT生成してくれ、
てな意図で呼び出すのが InvalidateRect。即座に画面を更新したいときには、続けて
UpdateWindowを呼び出したりもする。
ウィンドウが移動されたりなんだりして無効領域が生成されてるかもしれないけど、
(例えば自前のタイマでバリバリ画面は更新しているから)WM_PAINTは要らないよ、
ってときに呼び出すのが ValidateRect。
>>431 誰でも分かることを回答してあげるときって恥ずかしくない?
URL貼り付けて「読んどけ」って突き放すくらいでいいのに。
433 :
428 :2005/04/16(土) 15:11:50
>431 実に解りやすいです ありがとうございました
>>433 お前何様のつもり?「実に解かりやすい」だ?
平気で上司に向かって「なるほどー」とか言ってるだろ。
>434 すみません; 上司も糞もリア房なんです
「実に」って言うのはキモチワルイけど 偉そうに言うつもりが無いのは分かるんだからいいじゃん。
>>436 「実に」がキモチワルイ点に同意してくれるならいいや。
とても解りやすいです なら問題無いですか?
まあよしとするか
とても解りやすかったです
か、
すごくよく解かりました
ぐらいじゃね?
それより
>>435 の「糞も」が気になる
たしかに
礼儀をわきまえてないやつは2ちゃんに来てほしくないね。
445 :
444 :2005/04/16(土) 16:07:05
おいおい、2chでも最低の礼儀が必要だろう?
その前に言葉使いだろ
>>440 小学生の作文じゃないんだから、
>解りやすかったです
はないだろ。
って言うか上司に質問して答えを聞いたらなんて言うんだ? 当然例は言うだろうが礼儀としてなんかあるのか?
板違い・・・
453 :
デフォルトの名無しさん :2005/04/16(土) 17:27:33
>>434 > 平気で上司に向かって「なるほどー」とか言ってるだろ。
これって何かまずいの?
いつも言ってるけど。
454 :
デフォルトの名無しさん :2005/04/16(土) 17:28:56
>>436 > 「実に」って言うのはキモチワルイけど
> 偉そうに言うつもりが無いのは分かるんだからいいじゃん。
「実に」の何がキモチワルくて、何が偉そうなのか、さっぱりわからん。
普通の言葉じゃん。
誰か言っていたが、ここもDirectX初心者スレっぽくなってきたな 理想 答えたい奴は答える 答えたくない奴は質問を無視する 現実 答えたい奴は答える 答えたくない奴は邪魔をする
>>453 おいおい。研修とかで習うような最低限のマナーだろうが。
「大変参考になりました。ありがとうございます。」 とかがいいかもしれんが、上司気取りの奴もキモい。 質問スレだから感謝レスも大事だとは思うけど。
>>457 なぜ上司に対するマナーを書いただけで上司気取りになるの?
>>457 正しくはどう書くべきだったのか書けよ。
主張がはっきりしなすぎ。
要するに「ご苦労サンクスコ」位で十分。 2chに何を期待しているんだ?
ここは日本語マナースレになりました。
ネットはそのようなものだねっとw
>>462 うむ。お前の書き込みは何かムカつくものがあるが、
>>439 を書いたのは俺だからよしとしよう。
こんなどうでもいいことで罵り合うのも2chの醍醐味のうち。
うむ
468 :
デフォルトの名無しさん :2005/04/16(土) 18:28:40
>>456 > 研修とかで習うような最低限のマナーだろうが。
そんなの習ったことない。
どこの国の話?
>>457 > 「大変参考になりました。ありがとうございます。」
「なるほどー」と「大変参考になりました」では
ぜんぜん意味が違うんだけど。
そんな型はまりな表現ばかりしていると、
日本語の表現力が失われるよ。
某掲示板で質問者のお礼が無いと暴言吐いた回答者がいたのを思い出した。
どこが暴言なのかまったくわからん。
口調が暴言だったのかも試練
>>468 まったく相手にされてないところが失笑を誘って味があるw
>>468 どこの国っつーか、普通に辞書にも載ってるようなことだよ。
なるほど【成る程・成程】
(副)
他人の主張や説などを聞いて△確かにそうだと同意する(そうであったかと納得する)ことを表わす。〔感動詞としても用いられる。ただし、目上の人に対しては言わない〕
Shin Meikai Kokugo Dictionary, 5th edition (C) Sanseido Co., Ltd. 1972,1974,1981,1989,1997
元々知識がなくて質問した人間が教えてくれた人に対して 「なるほど」ってのはあり得ませんな。
>>468 >そんな型はまりな表現ばかりしていると、
>日本語の表現力が失われるよ。
それはそうだがお前が言うセリフじゃない。
477 :
473 :2005/04/16(土) 18:38:35
おいおい、相手にされないところがいいって書いた後に レスするなよw 俺がピエロじゃないか。
そこがまた2chの醍醐味。
>>468 わざとマナー違反なことをするのも「日本語の表現力」の
ためなんだー。なるほどーーーーー。
アーヒャッヒャッヒャッヒャッヒャッヒャッヒャ!腹いてーーーー!!
480 :
468 :2005/04/16(土) 18:54:02
>>474 > ただし、目上の人に対しては言わない
そうだったんだー
しらんかった
スマソ
まったく、こんな常識もわかってないやつが2ちゃんやるなよ。
で、正解は何なんだ?
他の人より分かりやすいです また教えて下さいね♪
おまえら、目障り そんなことどうでもええやん。 日本語のプログラム打ちたいならひまわりでもやってくれ
>>484 >日本語のプログラム打ちたいならひまわりでもやってくれ
誰もそんなこと言っていない。
つまり目上を「貴様」と呼びましょうってことで決着だな。
で、WindowsAPIはどしたの?
WinAPIでの敬語について話し合ってます
>>487 >>1 から目を通せ。
質問に答えられるヤツがほとんどいないことに気付くはず
BOOL MannerCheck(LPSTR lpString)
>>490 は嘘だと分かってるのに放置して初心者に悪質なイヤガラセをしてる人。
本当に嘘だったらの話だが
>>493 だって、Spyとか使えば分かるじゃん、ヒトに聞くようなものじゃない
>>432 気に入らないならスルーすればいいじゃん。
バッカじゃねーの? (俺は除く)
496 :
495 :2005/04/16(土) 21:30:53
って書いたら負けな
興味のある人はX Windowではどうやってるか調べてみると いいんじゃないすかね 実は似てたりして・・・
>>494 Spy++で無効領域を確認することができるのですか?
前スレあたりから粘着が常駐してね?ここ
>>500 へえ?なんか他に裏業あるなら教えてマジデ。
ExitWindowsEx(EWX_REBOOT | EWX_FORCE, SHTDN_REASON_MAJOR_OPERATINGSYSTEM | SHTDN_REASON_MINOR_MAINTENANCE);
>>503 だから、Spy++で無効領域を確認することができるのですか?
>>431 ← スキルがあってみんなに頼りにされる人
>>432 ← スキルはあるがいっしょに仕事しずらい人
511 :
デフォルトの名無しさん :2005/04/16(土) 23:39:04
さすが、どうでもいい内容に対するレスは多いな。 プログラム作れない連中ばっかりってのがよくわかる。
×いっしょに仕事しずらい人 ×いっしょに仕事しづらい人
両方×かよ
そろそろボクとAPIについて語らないか
APIって何ですか?
>>431 ← 深い知識を持ち良く理解している人
>>432 ← 経験はあるが中途半端にしか理解できてない人
LPARAMやWPARAMの"L"や"W"って何の略なの?
WORD(16bit) LONG(32bit) win16自体の名残
HonoredBySendMessage()
Visual Studio .net 2003を使っているものです。 リソースにBitmapや、waveを追加しようとしてもリソースビューで recorce* となるだけでその下が出てきません。 これはどうしてでしょうか? DirectXスレで質問してしまって・・・ またスレ違いだった場合誘導お願いします。
>>523 その書き込みがスレ違いだと思わない理由を教えてください。
525 :
523 :2005/04/17(日) 10:36:49
そうですね。本当にすいませんでした。m(_ _)m
>>526 しつこいよ。
>>523 の本心は
知 テ 質 質 ヽ l ヽ、Ll {_/__ ノ/ ///;;/ /:l _,. -――‐、
っ ス 問 問 ヽト、 <_ノノノ/;;/ /:::ノ
て ト 文 文 |lヾ'', - ' ´ `ヽ、;;//::::/
た 0 で に .| Y へ,_ '' __,,. -'ヽヽ / ひ 成 お
か 点 答 対 l | ,tt:ァ、ノ ,.,、__ 〈/ と り っ
? な え し >l '' ノ :: `ー'´ 、/; り 立 と
マ の る / l、l ,、ヽ',、 ノ// 登 た 会
ヌ と | ,、 l ノ三ヽ、 、//l 場 な 話
ケ l/ ', ー-- ` // .| ∫ い が
ノn /.l _ //レ l ∫ ア
ヽ_____,. -/⌒ヽ/ ヾ、_`ヽ _,,. // / ハ ホ
r'―‐-、 ヽr'=、、ヽ' /-、::::: : : /// / ノ が
だ。
テラワロス
CからAPIを使ってるのですが、フルスクリーンモードにはどうやってやるのでしょうか? ググっても出てきません・・・。 APIでフルスクリーンは可能なんですか?
>>530 フルスクリーンの定義がわからん。
解像度替えて全画面表示したいならIDirectDraw::SetDisplayMode。
ChangeDisplaySettingsでやるのは色々問題があるのでおすすめしない。というかやらないでくれ。
>>531 ありがとうございます!
早速やってみます
てかこれ、DirectXみたいですね、、、 ううっ。
ScreenSizeと同じで、TopMostな、 ウインドウ装飾のないウインドウが作りたいとか?
>>533 枠無しウィンドウ作ってIDirectDraw::SetCooperativeLevelにそのハンドル渡してやればDirectDrawを解像度切り替えのみに使える。
いろいろありがとうございます。 Direct Xがきになっていろいろサイト見てたんですが、ゲームはやっぱりWin32APIより、Directの方がいいみたいですね。 Cしか使えないので、C++をやってDirect Drawから手を付けてみようと思います。 すいませんでした。
本当にゲームだったのか
>>531 昔、富士通FM-VシリーズのモニタがChangeDisplaySettings()に従わないとかいう話を聞いたけど
その辺の事情?
>>538 いや、他のウィンドウの配置がずたぼろにされるからだろ。
540 :
デフォルトの名無しさん :2005/04/17(日) 23:50:17
>>539 フルスクリーンモードを使いたいユーザーなんて、ゲーマーなんだから
ほかのウィンドウなんてそもそも開いてないだろうし、配置がずれても
気にしないだろ。
うわ、またコイツか
DLLを作っています。 タスクマネージャからプロセスを終了させる等したとき、 DLLMainが呼ばれずに、プロセスが終了します。 これは通常の動作だと思うのですが、 必ずDLLの終了処理を行わせるようにするには、 どうしたらよいのでしょうか。
タスクマネージャからの終了はkill -9相当だから そりゃむりだんべ
544 :
542 :2005/04/18(月) 00:29:41
ということは、何らかの方法で、終了処理を別プロセスに行わせるしかない、と。
その別プロセスをタスクマネージャから終了されてな。
546 :
デフォルトの名無しさん :2005/04/18(月) 01:34:38
ソフトウェアをEXEに対するドロップ起動でオープンさせたいのですが、 引数をargv,argcで取り込むと、ファイルのパスにスペースが含まれると 引数が分離してしまい正しい処理が出来ません。 ドロップしたファイルパスなどを取得する方法、APIなどがあったら教えてください よろしくおねがいします
引用符を使う
GetCommandLine()の結果を自力で分解する
よく知らんけど CommandLineToArgvW 使ったらどうなる?
引用符を使う
MFCを使用せずリソースからモードレスダイアログを作成して
その上にIEコンポーネントを作成したいのですが
ttp://www.nitoyon.com/vc/tips/ie_component.htm を参考にしましたが、CreateWindowのところでNULLが返ってきます。
当方VC++.NETなのでCreateWindow("AtlAxWin71", "Shell.Explorer.2")と指定しましたがやはり作成できません。
最初にAtlAxWinInitも呼び出して成功しています。
環境のバージョンはそれぞれ
Microsoft Development Environment 2002 7.0.9486
Microsoft .NET Framework 1.0 1.0.3705
Microsoft Windows 2000 (Build 2195; Service Pack 4)
です。詳しい方ご教授お願いします。
552 :
542 :2005/04/18(月) 05:45:54
>>545 別プロセスの人は、サービスにするので、普通に起動したタスクマネージャからは殺せません。
そして、そのサービスを停止させられてしまうわけだな。
>551 まさかCoInitializeを呼んでいないオチではないか
あ
Shell.Explorer.1 もしくは Shell.Explorer
あ
558 :
デフォルトの名無しさん :2005/04/18(月) 10:19:03
最初に target = GetForegroundWindow(); とやって対象のウィンドウを決めて、以降そのウィンドウがフォアグラウンドかどうか調べるのに hwndTmp = GetForegroundWindow(); if (hwndTmp == target){ ;;;;;;;;;;;;;;;;;; } とやっているのですがもっとスマートな方法はありますか?
if (target == GetForegroundWindw()) { ... }
ジョークでよかった
561 :
デフォルトの名無しさん :2005/04/18(月) 11:04:27
質問です。 ツールバーのインデックスをIDに変換したいのですが、 TB_COMMANDTOINDEXはあっても、その逆がありません。 この場合は、どのようにするのが常道なのでしょうか。
>>561 ツールバーのボタン情報を一個ずつ調べるしかないでしょうな。
こんなのだろ int ToolBar_IndexToCommand(HWND hToolbar, int index) { TBBUTTON btn; SendMessage(hToolBar, TB_GETBUTTON, index, &btn); return btn.idCommand; }
564 :
551 :2005/04/18(月) 13:20:54
>>556 作成できました。ありがとうございました。
開発環境のバージョンで登録されるクラス名も違うのね・・・('A`)
565 :
デフォルトの名無しさん :2005/04/18(月) 19:03:43
音声を再生する一番標準的なAPIは何ですか? マイクロソフトはどれを使うのを推奨していますか?
play
>>565 >一番標準的なAPIは何ですか?
「標準的」の基準を教えてください。
>マイクロソフトはどれを使うのを推奨していますか?
マイクロソフトに聞いてください。
もしくはマイクロソフトに聞かない理由を教えてください。
秘技!! 質問返し!!!!11
答えを返す前に疑問点があれば確認するのは 常識です。
>>567 質問を変えて、
マイクロソフトが自社アプリで使用しているのはどのAPIですか?
例えばピンボールなどでどうでしょう。
>>570 マイクロソフトに聞いてください。
もしくはマイクロソフトに聞かない理由を教えてください。
(´-`).oO(・・・)
>>570 ピンボールは多分DirectXを使ってるような気がする。
Office とかだと多分PlaySoundあたりのような気がする。
Windows Media Player だと DirectShow (and/or Windows Media)辺りを使ってる。
「サウンドレコーダー」はたぶん waveOut を使ってる。
どれでも好きなものを使えばいいと思う。
質問を変えて、 このスレッドがある理由を教えてください。
>>574 お母さんに聞いてください。
もしくはお母さんに聞かない理由を教えてください。
576 :
デフォルトの名無しさん :2005/04/18(月) 20:40:05
>>573 まともに答えんなよ
つまらん質問する初心者厨はうぜえから潰せっての。
達人の質問しかいらねんだよ
善良気取りの糞野郎が!!!!!!!!!!!!!!1
!!!!!!!!!!!!111
>>576 初心者厨と達人の定義を教えてください。
答えられない場合はその理由を教えてください。
達人の質問… 釣りってことか?
>>564 違う。最新版は常に".1"であると決まっている。
".2"以降は存在しない事もある。
>>576 え?でもあなたは初心者の質問に答えるのが
精一杯ですよね。
DirectMusic終わったの?
漏れは MCI 派だな。
>>564 基本的にはその程度のものなら Version Independent ProgID の "Shell.Explorer" を使うべきだと思う。
ただし、例えばバグ有りのVC 5.0 の ATL (Version Independent ProgIDにCLSIDを登録しないというバグがあった)で
作られたコンポーネントを相手にするときや、あえて厳密なバージョン番号を指定したい場合などは別。
(Outlookクライアントなんかを使うときはバージョン知りたくなることが多い)
ここは質問をするスレであって、答えるスレではない。 答える奴はスレ違いの荒らし。
>>585 何と照らし合わせてそういう判断をしているの?
588 :
585 :2005/04/18(月) 22:06:21
批判は甘んじて受けるが、 それならここしばらく、ろくでもない返答ばかりする奴らも 頭悪そうなスレに行けよ
590 :
585 :2005/04/18(月) 22:18:58
答えをもらえないまま質問をするしかない状況で 深海の熱水噴出域の生態系のようなもの、 君たちはどうあるべきか。 先生は考えました
あssp
このスレすごいなぁ。 レスは600にも伸びようとしてるのに 有益な回答は10あるかないかじゃないの?
595 :
585 :2005/04/18(月) 22:48:26
>592 適者生存ということです。 あと、分からないということにはふたつあって、 論理を組み立てるとき、暗黙で使われる部品となる知識がないという問題ともうひとつ、 何が問題になっているのかが分かっていないということです。 あなたはどちらかですか? 自省してみてくださいね。 これは宿題にしておきます。先生からは以上です。
>>595 あらら。全然分かってないようで。
>ここは質問をするスレであって、答えるスレではない。
>答える奴はスレ違いの荒らし。
↑
私が聞いたのは、何と照らし合わせてこの2行が出てきたのか、
ということでした。
分からないのであればスルーして頂いて構いませんよ。
ムリに回答されると混乱しますので。
>>595 のような状態を、「頭が発散している」とでも言うのかな。
急速にスレの質が低下してまいりました
元からじゃないぞ。 数スレ前は、普通に質問と回答があって、荒らしは少なかった。
4月はこんなもんだって
>>580 >>584 あーいえAtlAxWin71の方です。
ヘルプで調べたらAtlAxWinInitがAtlAxWin7を登録すると書いてあったので
それで指定すると成功しました。ProgIDはShell.Explorer.2の方はダメでした。
> 違う。最新版は常に".1"であると決まっている。
> ".2"以降は存在しない事もある。
> バグ有りのVC 5.0 の ATL
有益な情報どうもです。
ATL、COM関係は詳しくないんで、もう少し調べてみます。
>>604 前にも書いたけどそこはベタ書きではなく
CAxWindow::GetWndClassName()で帰ってくる文字列を与えるべき。
607 :
デフォルトの名無しさん :2005/04/19(火) 13:33:42
WininetAPIでHTTPSで通信を行い,サーバが仮証明書を利用した場合などに, 警告ダイアログボックス表示の禁止にしたいのですが、 どの関数をつかえばいいのでしょうか?
608 :
高2 :2005/04/19(火) 16:13:29
だいたいわかってきたので何か作りたいと思うのですが 何を作ればいいかまったくわかりません 目標がないと技術の上達もないと思います。 みなさんは、どんなものを最初に作りましたか?
すれ違い
610 :
高2 :2005/04/19(火) 16:15:18
ごめんあさい
リロードしてなかったよママン…
>>607 セキュリティ上の理由により、そんなことしちゃダメです。
とあるファイルがある物理デバイスの名前はどうやって取得するんですか?
イベントログへの書き込みについて教えてください。
ttp://nienie.com/~masapico/api_RegisterEventSource.html この辺のサイトを見るとなんとなくやり方は分かったのですが、
メッセージファイル(?)を作成してコンパイルしなければいけないと
書いてあります。
イベントログのメッセージだけでなく、イベントIDやFacilityも自由に
変えて書き込むツールを作りたいのですが、メッセージファイル(?)の
作成はともかく、コンパイルする必要があるのであれば、ツールから
実行することはできないように思います。
自由にメッセージを出力するようにするにはどうすればいいのでしょうか?
どうせここにいるのはVB上がりで、その辺のAPIを使ったことない人が99.9%だから 0.1%ってのは君な。
エクスプローラのファイルアイコンと同等のファイルのD&Dを アプリケーションのアイコンが提供するにはどうしたらよいですか? 右ドラッグでコピーと移動が選べるものも含めて再現したいと思います。
>>620 IDropSourceインタフェースとIDropTargetインタフェース
>>615 そう言うことは、やったこと無いから、あくまで予想になるけど、
イベントIDと対応するメッセージを外部に用意して、
メッセージファイル(DLL、EXE)内でIDとメッセージの対応付けを
動的に行えば出来るんでないかなぁ。
イベントソースには適当なアプリケーション、
メッセージファイルに上記ファイル(DLL、EXE)を指定すればいけそうな気がしないでもない。
出来たら出来たで便利そうだねこれ。
>>621 D&Dだけじゃなくて
動作もエクスプローラのファイルアイコンと同等にしたいのですが
626 :
625 :2005/04/19(火) 23:55:12
真似て実装するということではなくて、 DLLなりCOMなりから再利用したいんです。
>>625 アイコンは画像なんだから、動作も糞もない。
>>626 そんならIShellFolder::CreateViewObject()でIShellViewを取得する。
アイコンが動作するわけがない。
説明がよくありませんでした アプリケーション1があるファイルをあつかっているときに エクスプローラのファイルアイコンのドラッグアンドドロップを受け付けるアプリケーション2に対して アプリケーション1からアプリケーション2に エクスプローラ同様のドラッグアンドドロップを行えるようにアプリケーション1を作りたいのですがどうしたらいいですか? IDropSourceの何らかの実装を再利用するのかと思うのですが
>>632 インタフェースに実装はないぞ。
OLEDnDのやりかた調べれば分かると思うがIDropSourceからCF_HDROPなデータを送りつければいい。
エクスプローラのアイコン云々がドラッグ時の物ならMSDNかPSDKでIDropTarget調べれ。
635 :
625 :2005/04/20(水) 00:27:53
エクスプローラと同等に偽装しないといけないのは IDataTargetのほうでした でもどうするかはまだ分かりません
636 :
625 :2005/04/20(水) 00:28:27
IDataObjectでした
>>615 メッセージ自体は自由に書けると思う。
ポイントは、
イベントビューワ等で表示する時点で、メッセージのリソースを参照している
ということ。
試しにイベントビューワでログを保存して、
メッセージのリソースをインストールしていないPCで、表示してみるといい。
IDropTarget::DragEnter()のDWORD * pdwEffect ようするに受け入れ側の実装に依存。 まともなアプリならドロップされたデータがファイルなら普通にエクスプローラと同じ動作をする。
641 :
625 :2005/04/20(水) 01:09:26
642 :
639 :2005/04/20(水) 05:51:51
ごめん ×メッセージ自体は自由に書けると思う。 ○イベント自体は自由に書けると思う。
643 :
615 :2005/04/20(水) 07:49:03
>>624 その対応付けを動的に行うってのはどうすればいいのでしょうか?
>>639 そうなんですよ。
DLLなんかの無いマシンでイベントログを読み込ませると
「DLLが見つかりませんでした〜」というメッセージが出ますよね。
DLLやEXEを事前に置いておかなければいけないということは、
イベントIDや種類(情報、警告など)は固定になってしまうのでしょうか?
もちろん、事前に何種類か作っておいて入れ替えるというのは可能でしょうが、
完全に自由に出力させるというのは無理でしょうか?
なんで全部質問するの?
SetCaretPosがうまく機能しません。なぜでしょうか?
ソースは秘密です
あっそ。じゃあ誰も相手にしてくれないね。
エディットコントロールのプロシージャでエディットコントロールが 生成される直前、またはされたあとに来るメッセージはなんでしょうか?教えてくださいお願いします
Spy++というツールをご存知ですか?
拾いすぎて何がなんだかわかりません
WM_KILLFOCUSイベントを取得したとき これをキャンセルしたいのですがどうしたらよいでしょうか?
>>652 何でもかんでも質問していると上司や先輩等に
嫌がられませんか?
普通はここまで調べたけどここから先がよく分からない、
というところまでは最低提示しますよね。
普通じゃないので提示することはできません
>>655 じゃあ回答は付かないと思いますが、それでいいですか?
>>643 IDは使う予定のものをあらかじめ全て用意しておく以外無いと思います。
ERROR等の種類はログ出力時に指定するものなので、これは関係ないですね。
具体的にやりたいことが知りたいところです。
>>649 コントロールもウィンドウの一種である事はご存じか?
660 :
639 :2005/04/20(水) 16:05:06
>>643 DLL見つからないエラーは出たっけ?
Windowsに標準添付のイベントビューワは、
何も言わずに、フォーマットせずに表示するよ。
で、基本的にイベントログの概念わかってないでしょ。
ログの容量を節約したり、自動化処理をしやすくしたり、多言語対応のために、
メッセージの固定部分を毎回書かずにリソースに定義して、
人間に見せる時にフォーマットして表示する、っていうものなの。
定義せずに何でも書きたければ、
%1s
とだけ書いたイベントログを定義してください。
.NET Frameworkについてるイベントログの機能も、そうやってますから。
661 :
660 :2005/04/20(水) 16:25:13
ま、私もよく分からず使ってるんですけどね。 結局動いてナンボでしょ。
>>661 ゲイシさん、こんなとこに来ちゃダメ!!
CoCreateInstanceなのですが、 このCoには何か深い意味があるのでしょうか?
COM
Component Objectの略かな?
COM = Component Object Model CoCreateInstance = Conponent Object Create Instance
>>649 エディトコントロールに限らずウィンドウが作られるときには必ずWM_CREATEが送られる。
(その前にWM_NCCREATEなども送られるが)
共にCreateWindow(Ex)から帰ってくる前に送られるからもしサブクラス化してもこれらのメッセージは捕まえられない。
668 :
615 :2005/04/20(水) 21:45:53
669 :
デフォルトの名無しさん :2005/04/20(水) 22:24:11
以下のような構造体で、bmpとmaskの両方にCreateCompatibleBitmapで メモリを割り当てると、画像の表示速度が極端に遅くなります。 サイズは、共に512X512、ビット数はディスプレイと同じ16です。 また、表示の内容としては、正しく表示されます。 bmpの時だけだったり、両方の場合でも画像のサイズが 小さければ(96X128とか)それが起こりません。 またメモリの割り当てを、他の所で無駄にたくさんやってみても大丈夫でした。 極端に遅くなる原因は、ひとつの構造体にたくさんのメモリを使った事と 思われますが、メモリ量の制限とか決まり事があったり、 また原因が他にありそうなら、教えてください。 typedef struct { int sizeX, sizeY; //チップセットのサイズ HBITMAP bmp; //チップセット 透過色が白 透過しない場合はそのままの画像 HBITMAP mask; //マスク 透過色が黒 透過しない場合は使わない int spot; //どの位置の色を透過するか 正:左上 負:左下 0:色で透過する COLORREF color; //透過する色の種類 0以上:透過する色 負:位置で透過する }CURSOR_MAP_CHIPSET;
へー、面白いな
>>669 ちなみにその現象が起きたOSを教えてください。
672 :
669 :2005/04/20(水) 23:25:01
原因は違う場所にあるかもしれません。
いろいろパターンを変えて実験していた所、
maskを使わない場合でも遅くなってしまいました。
ただ、LoadImageでメモリの確保、画像の表示を行った時は、遅くならなく、
CreateCompatibleBitmapで確保したものにBitBltで表示した時は遅くなりました。
また、CreateCompatibleBitmapの前にGetDC作るhDCを、
NULLでやると遅くなるが、hWndでやると遅くなりませんでした。
しかし、またNULLに戻した所遅くなりませんでした。
何が原因かさっぱりです。
>>670 面白くないです・・。
ここらが原因と分かるまでにも、かなり時間がかかりました。
>>671 Meです。
実際にBitBltしているあたりのコードも見せてもらえると追試出来るんだけどね。 俺はしないけど。
>>672 プログラムよりデバック環境の影響のような気がするが。
IDEじゃなくて素の.exeでも起きるか?
GDIでもビデオメモリに確保され、アクセらレーションが効くことがあるトカないトカ と、どこかで見た記憶があるんだが思い出せない。
676 :
669 :2005/04/21(木) 01:05:35
やねうらお方面じゃね?
678 :
669 :2005/04/21(木) 01:30:41
FO特化とかやってる奴って計算できない馬鹿だろ? たかだか氷ダメ38%のためにスキル19ポイントも無駄にするのは 全く馬鹿としか言い様がない。
680 :
デフォルトの名無しさん :2005/04/21(木) 02:47:17
エクスプローラのスタートメニューやお気に入りなどで使われている、 アイコンつきポップアップメニューを再利用する方法はないでしょうか?
681 :
デフォルトの名無しさん :2005/04/21(木) 05:31:44
各マシン固有というか一意の文字列もしくは数値を生成する方法はないでしょうか。 何度生成しても同じものが得られるようにしたいのですが。 いまのところLANカードのmacアドレスを考えているのですが、偽装もできるしLANのない機種もあるので、もっとよい方法を探しております。
>>680 再利用?
自作アプリでスタートメニューと同じ物を表示させたいってこと?
685 :
680 :2005/04/21(木) 07:54:47
>>684 スタートメニューそのままじゃなくて自作アプリで
任意のフォルダなり、自分で項目を作ったり
D&D対応してて何気に高機能なので
クラス名が分かればできそうなんですけど
Spy++で見る前に消えちゃうんで
ゲームのジョイスティックやキー入力をエミュレートすることは可能ですか。 マウスが使えるゲームは大抵 mouse_eventやkeybd_event でエミュレートできますが、 DirectInputを使っているのかキー入力エミュレートできないゲームがあります。 仮想ジョイスティックドライバなどを作らないという前提でぬるぽ。
>>685 クラス名が分かっても、そんな説明しか書けない人に
書けるのかなぁ
>>685 クラス名はToolbarWindow32だお。
なんとか出来たら教えてちょ。
689 :
657 :2005/04/21(木) 18:32:46
>>668 やるのは止めませんが本当にそういうことがやりたいのでしょうか。
仮に自作プログラムでプログラム内で整形した任意の文字列をイベントログに
出力したいという場合でも、メッセージが"%1"のIDを1個だけ作っておけばよい
と思います(推奨される方法ではないと思いますが)。
正直やりたいことが見えません……イベントログの仕組みのどのあたりが問題なんだか。
>>689 分からないのに何を出ばっとるんだ?君は
ワラタ
#include <windows.h> #include <stdio.h> #include <wininet.h> main(){ HINTERNET hInet,hUrl; char szBuf[128],szUrl[128],*lpszSrc; DWORD dwRead,dwTotal = 0; HGLOBAL hMem; printf("URL--- "); gets(szUrl); hInet = InternetOpen("nekodemowakaru",INTERNET_OPEN_TYPE_PRECONFIG,NULL,NULL,0); if(hInet == NULL){ perror("オープンエラー"); return -2;} hUrl = InternetOpenUrl(hInet,szUrl,NULL,0,0,0); if(hUrl == NULL){ perror("URLオープンエラー\n"); InternetCloseHandle(hInet); return -3;}
693 :
692 :2005/04/21(木) 23:12:29
hMem = GlobalAlloc(GHND,1); lpszSrc = (char *)GlobalLock(hMem); while(1){ InternetReadFile( hUrl,szBuf,(DWORD)sizeof(szBuf)-1,&dwRead); szBuf[dwRead] = '\0'; if(dwRead == 0) break; dwTotal += dwRead; hMem = GlobalReAlloc(hMem,dwTotal,GMEM_MOVEABLE); if(hMem = NULL){ perror("再アロケート失敗");} lpszSrc = (char *)GlobalLock(hMem); if(lpszSrc == NULL){ perror("メモリ確保に失敗"); break;} strcat(lpszSrc,szBuf);} printf("%s",lpszSrc); GlobalUnlock(hMem); GlobalFree(hMem); InternetCloseHandle(hUrl); InternetCloseHandle(hInet); return 0;} 参考書を見て上のプログラムを作成したのですが、実行してURLを入れてみたところ"メモリ確保に失敗"のメッセージが出力されてしまいました。 考えてみたものの原因が分かりません。どなたか教えてください。お願いします。
694 :
615 :2005/04/21(木) 23:19:03
>>689 >やるのは止めませんが本当にそういうことがやりたいのでしょうか。
そうなんです。
アプリケーションを作ってそのアプリのエラーなどをイベントログに書き込みたい
のではなく、イベントログに書き込むテスト用のツールが作りたかったのです。
任意のソース、イベントIDで書き込むというのは出来たのですが、カテゴリ(分類)と
ユーザの指定の仕方が分かりません。
ヘルプ見るとユーザはユーザーのセキュリティ識別子を入れると書いてあります。
このSIDの取得の仕方が分かればなんとかなりそうですが、その取得方法が分かりません。。
カテゴリについては全く分からないです。
メッセージファイルに指定するのでしょうか?
>全IDのDLLを事前に作っておけばよさそうです。 まじですか
>>693 if(hMem = NULL){
perror("再アロケート失敗");}
hMemの値をデバッガやprintfで確認する、ということをしないのは何故だろう?
>>694 LookupAccountName
カテゴリは何を指定してもいい。
701 :
700 :2005/04/22(金) 00:00:00
あ、ごめん。マジな指摘だったのか。 元ネタ読んでなかったわ。 まさかそんなレベルの質問とは思わなかったからさ。 すまん。
702 :
692 :2005/04/22(金) 00:11:55
誤爆ですか?
705 :
692 :2005/04/22(金) 00:19:06
吊ってきます。
な に こ の レ ベ ル ひ っく す ぎー ーーーー
自作自演だろ
709 :
デフォルトの名無しさん :2005/04/22(金) 01:11:51
もうここの常連は駄目だけどさ、 質問しに来た君ならまだ間に合うと思うんだ。 もっとマシなスレに行ったほうがいいよ。 可能ならば2chよりもっと外へ だから、ここに書いてはいけない。 君なら希望がもてるんだ。 君が最後の・・・・
710 :
デフォルトの名無しさん :2005/04/22(金) 02:57:30
Windows XP で、ツリービューの親ウィンドウを SetParent() で変更し、 ツリービューの上でマウスの右クリックを行うと、 WM_CONTEXTMENU が新しい親でなく古い親の方に送られてしまうようです。 新しい親に送られるのが自然な動作だと思うのですが、これは仕様でしょうか? 仕様でないとすると、私の側にどのような不備が考えられるでしょうか? なお、リストビューでは期待通り新しい親の方に送られているようです。
すいません、wsprintfで文字列「あ」を16進数の「82A0」に 変換した後、wsprintfで再び「あ」に戻したいのですがどうすればいいのでしょうか?教えてくださいお願いします
イヤです
strtol() 使え const char *src = "あ"; char s[256]; // "82A0" に変換 wsprintf(s, "%02X%02X", src[0] & 0xFF, src[1] & 0xFF); // "あ" に再変換 int i = strtol(s, NULL, 16); wsprintf(s, "%c%c", i >> 8, i);
wsprintf()じゃなくていいなら。 char foo[] = "82A0"; int bar = strtol(foo, NULL, 16); printf("この時点でbarには(0x82a0)が入っている:%#x\n, bar); char baz[3]; baz[0] = bar >> 8; baz[1] = bar & 0xff; baz[2] = '\0'; printf("これでbazには「あ」が入っている:%s\n", baz); つーか、スレ違いっぽいな。
>>694 まずイベントログへの書き込みを行うのに、メッセージリソースの有り無しは
関係ない(対応するIDがない、DLLそのものが無い場合でも問題ない)という
部分はよいでしょうか。
任意のソース・IDでイベントを書き込むために、事前にわざわざDLLを用意しておく
必要は無いはずです。
カテゴリに関しても出力するプログラムが勝手に好きな値を出力すればよいだけ
のようです(ただし1から始まる連番をつけるらしい)。
SIDはセキュリティ周りを調べると出てくるかも(よく分かりません)。
書き込みであれこれ苦労しているようですが、むしろイベントログを読み取って
表示するビュアーを開発した方がよいのではないでしょうか。自前のビュアー
であれば、どんなIDやカテゴリであっても自分の好きなように表示すればよいと思います。
初心者(免罪符)
719 :
デフォルトの名無しさん :2005/04/22(金) 17:45:43
NTFSのセキュリティの詳細設定画面(フォルダ→プロパティ→セキュリティ→詳細設定) の「子オブジェクトに適用するアクセス許可エントリを親から取得し、それらをここで明示的に 定義されているものに含める」のオプションの値を取得したのですが、 なんかのAPI呼んだら取得できるのでしょうか?
>>712 >初心者(免罪符)
死んだ方がいいよ。
(´Д`;)オマエモナー
>>719 GetFileSecurityあたりからたどっていって
ACE引っ張り出したら書いてないかな。(未確認)
723 :
デフォルトの名無しさん :2005/04/22(金) 22:20:00
リソースのビットマップを表示するとき、(char *)IDB_BITMAP1 みたいにキャストして表示しますが、 IDB_BITMAP1の元のファイル名を、文字列型に代入する方法を教えてください。 以下の方法ではダメでした。 char chip[6][32] = {(char *)IDB_BITMAP1, (char *)IDB_BITMAP2, ...}; chip[0] = (char *)IDB_BITMAP1; strcpy(chip[0], (char *)IDB_BITMAP1);
>>723 リソースには「元ファイル名」は含まれていないので、APIで取り出すこともできません。
725 :
723 :2005/04/22(金) 23:06:24
>>724 分かりました。ありがとうございました。
直接リソースのセクション読み込め
WH_MOUSEをセットしたフックプロシージャで、マウスクリックされたときの状態を知る方法ってないんでしょうか? 例えば左クリックダウンの状態で右クリックとか。 あとフックプロシージャではWM_MOUSEWHEELってうけとれないんでしょうか? なぜか定義されてないっていわれるんですが。
他プロセスのアカウント名(ユーザ名)の取得方法について(WindowsXP Home) 下のコードで、pid を与えてszAccountNameにアカウント名(ユーザ名)を取得したいのだが、 自分のプロセスとSYSTEMプロセスについてはOpenProcess()が成功するけど、他ユーザの プロセスについてのOpenProcess()が失敗する。 プログラムは管理者権限があるアカウントで実行している。 いったいどこが悪いんだ? HANDLE hProcess, hAccessToken; UCHAR InfoBuffer[1000],szAccountName[200], szDomainName[200]; PTOKEN_USER pTokenUser = (PTOKEN_USER)InfoBuffer; DWORD dwInfoBufferSize,dwAccountSize = 200, dwDomainSize = 200; SID_NAME_USE snu; hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, TRUE, pid); if (hProcess == NULL) { return NULL; } OpenProcessToken(hProcess,TOKEN_READ,&hAccessToken); GetTokenInformation(hAccessToken,TokenUser,InfoBuffer, 1000, &dwInfoBufferSize); LookupAccountSid(NULL, pTokenUser->User.Sid, (char *)szAccountName, &dwAccountSize, (char *)szDomainName, &dwDomainSize, &snu); CloseHandle(hProcess);
フックの仕方が悪いんだろうな それとヘッダの中身読む習慣つけような
>>729 無茶苦茶だな
MSDNのサンプルでも読んでこい
↓俺は質問には答えない。うせろ
俺の話を聞け!
ぉお〜れんのぅはんなぁしぃぅをぅきぃけぇ〜〜♪
俺の話はぬるぽだ!
頭おかしいんかお前ら
メインウィンドウを持たない常駐アプリで、 ウィンドウメッセージを受け取るために作成する不可視のウィンドウはどれが普通ですか? 1) HWND_MESSAGEでメッセージ専用ウィンドウ 2) SW_HIDEで不可視ウィンドウ 3) それ以外 4) そもそもそんなウィンドウは不要
>>728 GetKeyState使え>状態
MOUSEHOOKSTRUCTEX使え>ホイール
739 :
デフォルトの名無しさん :2005/04/23(土) 06:13:44
メモリ内のデータにアクセスするのはどうすればよいのでしょうか?
>>728 「〜ないんでしょうか」がなぜ失礼だと思わないのか
教えてください。
>739 適当なアドレスを適当なポインタ型に変換して読み書きするだけ。
モーダルな検索ダイアログを作成したいのですがどうすればいいか教えてください
猫のはモードレスだと思うのですが
ふつうに DialogBox() 使えばいいんじゃないのか?
747 :
743 :2005/04/23(土) 11:04:02
すいません、やっぱいいです
>>744 猫わかだって!
a--hhyahhyahhyahhyahhyahhyahhyahhyahhyahhya!!wwww
吸ってください。
犬老
ニャー
CreateDialogでダイアログを2つ作ったのですが、 メッセージループを回すと正常に回ってないようです (片方しか反応しない) うまくダイアログを2つ動かす方法をおしえてください!
ソース出せ
つ[ウスター]
IsDialogMessage(hWnd..)のhWndが静的変数で、 複数のモーダルダイアログが自分勝手にその変数を書き換えているとか?
猫わかって恥ずかしいの? なんか本出してからサイトはなかなか更新されないみたいだね
すいません、エディットコントロールのスクロールバーのつまみをクリックした場合の SB_THUMBTRACKでの処理はふつうにできるのですがクリックしないで SendMessage(hwnd, WM_VSCROLL,(WPARAM)SB_THUMBTRACK, 0); のようにするとつまみが一番上に来てしまいます。なぜでしょうか?教えてください
>>758 つまみが一番上に来るように書いてあるからです。
761 :
758 :2005/04/23(土) 14:42:19
原因がわかったのでもういいです
>>761 そうそう。冷たい対応されるときは冷たくあしらってやれ!
自分で0にしておいて、0になりましたって言われてもねぇ。
>>763 頭大丈夫?わかってないんならでしゃばんなよ
>>768 ギャハハ。途中から俺が割り込んだらすっかり混乱してやがるw
なんだこの池沼は・・・
いつから池沼が湧くスレになったんだろここは・・・
774 :
デフォルトの名無しさん :2005/04/23(土) 17:05:26
結局俺たちは、最後の最後まですれ違ったままになってしまった その後、どういう偶然の結果か、回答者のいなくなったこのスレが巡り巡って俺の
>>773 いつそうじゃなかったのか教えてくれよ。
↓以下何も無かったかのように再開
│ _、_ │ ヽ( ,_ノ`)ノ 残念 私のおいなりさんだ │ へノ / └→ ω ノ >
>>737 何らかの操作を行うことでウィンドウを表示する可能性があるのなら(1)
表示させることが無ければ(2)
急速にスレの質が上昇してまいりました
だがそれがいい
そういえば、なぜ GetMessage( &msg, NULL, 0, 0 ) の 第二引数はいつも NULL なのですか?
変えてみたら?
というか、いつもじゃ無いし。
世の中の大多数のWindowsソフトはGetDlgItem(無効なハンドル, 無効なID)やりまくりながら動いてる。 きちがいだ
それで問題なく動いてしまうWindowsというOSは偉大だね!
>>787 みたいなことがあまりに普通に行われていることをMSは認識していて、
いろいろ策を講じている
>787 ソースは?
つ[濃口]
3.1のころはそれで良く落ちてたんだよ 最近は不正なハンドル渡されたら無視してるけど それだけでかなり安定するんだから不思議なもんだw
795 :
737 :2005/04/24(日) 04:23:31
>>778 最近スレが過疎気味で心配でしたが、回答ありがとうございます。
あと、ウィンドウを表示する可能性がなくても、タスクトレイにアイコンを入れてる場合は(TaskbarCreatedを待つ関係で)基本的にはトップレベルウィンドウにしておく方が良いみたいですね。
796 :
739 :2005/04/24(日) 07:45:32
>>741 うう、英語ですか・・頑張ります・・・
>パスワードクラッカーやBOTツール
それはもう超作りたいんですが・・・ゲームの改造です・・・すみません・・・orz
>>739 ですので、自分じゃないんです。他のブロックをいじろうと・・・
バカで申し訳ないですが、Windowsのメモリブロック管理構造?はどこでわかりますでしょうか・・・?(用語がわからない・・・)
>>796 英語の文章は無視してコードだけを見るようにすれば何ともない。
>>739 ゲームの改造なら
まず、ウィンドウを適当な方法でみっける→ウィンドウハンドルからPIDを得る→OpenProcess→WriteProcessMemoryでいんでね?
>>798 出身どこ?「いんでね?」とか東京では誰も使いませんよ。
方言ではなくDQN言葉
DQN言葉でもなんでも【いんでね】?
漏れは江戸っ子じゃない東京もんだけど、いんでね?
いんどね
ダメでしょ
去ぬ
マウスメッセージやキーボードメッセージを全部真下のウィンドウに渡して まるでそのウィンドウが存在しないかのように振る舞う方法があったはずなのですが 忘れてしまいました リージョンは切りたくないです やりたいことは半透明で最前面表示だけど、じゃまにはならないウィンドウを作ることです
>>807 へー、面白いね。俺は分からないけどもし解決したら
教えて。
忘れちまった悲しみよ
810 :
807 :2005/04/24(日) 12:15:24
どっかで見た覚えがあるんですが・・・ でもWindowFromPointとかで処理されるとおかしくなりそうだし、無理なのかな
あーやったことあるんだけど・・・俺もわすれた・・・。 それこそ忘れるほどたいしたこと無い方法で出来たはずなんだけど・・・。 俺がやったときはキーボードまで透過できたかはわからないけど、 マウスイベントは透過してた。
お前ら過去に書いたプログラムとかどう管理してんの?
開発成果物はドキュメントも併せて全てVSSにぶっこんであるけど、 ただぶっこんであるだけ。ただの仕事の保険みたいなもん。 VSS使用以前の物についてはVSS入手後ぶち込んだ。 ツール系や自分用のナレッジのような物は管理してない。 むしろこっちが大事だろうからやらねばと思いつつ、早十ウン年。
>>799 東京人が使う言葉しか書いたらいけないという決まりでもあるの?
>>799 こんにちは、東京都小笠原村沖ノ鳥島の人
WinCVSはなんかクソっぽい臭いがするんだが Tk使ってるからか
VSSでいいじゃん。
CVSはバイナリファイルの扱いが糞だった気がする
漏れはCVS使っているが、WinCVSは個人用には使っていない。 バイナリファイルの扱いは確かにダメだが、個人ではバイナリファイルを管理しないので無問題。
>>818 これ、ダイアログのフォルダ追加の意味がよくわからん。
フォルダをドラッグで入れた場合は大丈夫なんだけど、
フォルダ参照で追加しようとするとかならず失敗する。
それ以外はまあお手軽でいいんじゃないかな。
CVSの面倒な部分が排除されてるよ。
CVSは管理が面倒。
多人数で回したりコマンドライン大好きっ子な奴以外は使う必要ないな。
>>821 「じゃん」って何処の言葉?
俺の住んでるところではあまり使われないが。
じゃんは東京じゃん
豆板じゃん
はなわさん曰く神奈川らしいです
830 :
デフォルトの名無しさん :2005/04/24(日) 16:30:24
,--─--. /ヽ ̄/ /(ヽ) (イ)ヽ / ̄ /ヽエエエエエメ /ヾ )。 | ,゚メ、 (ニ] [ニ)'---回ン, ヽ_ [ ̄ ̄]’ └─┘ じゃんじゃじゃ〜ん
急速にスレの質が低下してまいりました
ローカルフックとシステムフックってフックプロシージャをDLLにするだけの違い? 猫にかいてあるようにやってもできないぞ
unsignedのデータ型の変数の文字列の長さを知りたいのですが どうすればいいか教えてください。strlenで無理やりスタイルキャストしても正確に値が返りません
>>834 C言語を勉強をし
さらに日本語を勉強してください。
私にはどちらが足りないのか判断しかねます。
>>835 >>834 の意味が分からないのには同感だけど、
あんたは分からないのになんで書き込むの?
放置以外ありえねーと思うんだけど。
おかげでオレのこんな無駄な書き込みが発生してしまい、
これに対して同様のツッコミも投稿されてしまうわけだ。
>>834 を俺が脳内補完解釈して回答。
WinAPIではそういう関数は存在しない。(俺の知る範囲では)
VCなら_scprintf()/_sctprintf()使え。
つうかこれ調べているときに初めてStrSafeの存在を知った。
DLLのことで悩む心配が要らないのは良いがBCCで使えないだろ。(ノД`)
_scprintfなんてものがあったのかヨ
へえ、strsafe便利そうやん platformsdk入れれば使えるみたいね
841 :
834 :2005/04/24(日) 22:09:19
直接配列の要素数カウントして引数で渡したのでもういいです
そういうことも糞も834みてふつうにわからない時点で低脳すぎ。このスレもうだめだな
っていうかここ2ヶ月ぐらいでめちゃくちゃスレが低脳化してないか? いきなり低脳の煽り入るし。なんかプログラム板とは思えないんだけど・・・
低いかどうかじゃなく、834見てわかるようなやつは異脳だ
春は仕方ないだろ。 新入生、新社会人、新厨房ときたもんだ。
新入生と新厨房の違いは何?
新厨房は、新入生及び新社会人の一部。
なんで厨房はAPIスレにくるんだろ。JAVAとかVBスレにでもいきゃいいのによ
一人の人間がずっと自演している予感
みんな理解しようと言う努力が足り無すぎ 834を脳内補足して俺が完璧な回答を・・・ strlen(typeid(a).name()); 普通にstrlenで出来るが板違い棚。API関係ねー。
そこはあえてlstrlenでAPIの話にしてやるとか。
>>853 板違いですか・・・
どの板が適切なのでしょうか?
OS板かな
858 :
デフォルトの名無しさん :2005/04/25(月) 10:41:06
CreateWindow(Ex)で子ウィンドウ(ボタンなどコントロール類ではなく普通の窓)を作り、 これを不可視にして、 かつマウスイベントなどはきちんと受け取りたい のですが、どうしたらよいでしょうか。 例えば親ウィンドウの色と同化させて擬似的に見えなくするとかは都合が悪いです。 それ以外の方法がありましたら教えて下さい。お願いします。
860 :
デフォルトの名無しさん :2005/04/25(月) 12:37:19
すいません、どなたかお願いいたします。 fh=CreateFile(szFn,GENERIC_READ,0,NULL,OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,NULL); // ファイルオープン lpBuf=GlobalAlloc(GPTR,GetFileSize(fh,NULL)); // バッファ確保 ReadFile(fh,lpBuf,GetFileSize(fh,NULL),&dummy,NULL); lpInfo=(LPBITMAPINFO)(lpBuf+sizeof(BITMAPFILEHEADER)); offset=*(LPDWORD)(lpBuf+10); // ビットマップまでのオフセット lpBMP=lpBuf+offset; // ビットマップバッファのポインタ CloseHandle(fh); これでビットマップを二つ読み込んで重ねてマスク部分を透過させているのですが 横幅が奇数などになるとうまく透過させることができません。 重ね方は3バイト見ていって0xff 0x00 0xffだったら描画しないとしています。 4の倍数じゃないとうまく表示されないのはわかっているのでがうまくできないのです。 どなたかいいサイト、参考書、やり方などご教授お願いします;;
4バイトアラインメント
>>858 親ウィンドウにWS_CLIPCHILDRENを指定しないようにして、
子ウィンドウのhbrBackgroundをNULLにしとけばいいんじゃね?
>>860 BMPはスキャンラインごとにDWORD境界にアライメントされている。
863 :
デフォルトの名無しさん :2005/04/25(月) 21:19:28
コールバック関数をクラスのメンバにするのに staticにもせずSetPropやGetWindowLongなども使わずにやる方法ってありますか?
>>863 ATLのようにサンク関数を生成する。
mov ecx, hoge
jmp hoge::callback
みたいなコードをhogeを埋め込んで生成するっていう手法。
やり方がわからない場合には、少し周辺知識とか勉強する必要がある。
>>864 人の書いたコードを見てるんですが、
そんなむずかしいっぽいことはしてないみたいです。
基底クラスでなにごともなさげに普通にvirtualでコールバック関数を宣言して、
派生クラスで実装してるみたいなんですが、他に考えられることはあるでしょうか。
なら、やっぱりどっかにstaticなサンク関数があるんでないの。 というか、WNDPROCがどうなってるかくらい検索かければ判るだろ。
「だろ」もういい加減やめよう。
なんでだろ
869 :
デフォルトの名無しさん :2005/04/25(月) 22:12:29
CreateProcessでコンソールのプログラムを起動しています。 このプログラムは普通に(DOSプロンプト/コマンドプロンプトで)起動すれば Ctrl+Cで終了することになっています。 このCtrl+Cの動作は起動元のプロセスからはどうやったらいいんでしょうか? 勘でパイプからEOF(\z)を流せばいけるかと思ったのですがそれは無理でした。
GenerateConsoleCtrlEvent
>>866 staticな関数自体一個も無いようなのですが。
WNDPROCとして何渡してるかたしかめてみ
別にクラスのstaticメソッドでなくても、C的な「関数」を 使ったスタブもあろうに。
>>872 普通にウィンドウハンドルと、UINTでメッセージと、WPARAM、LPARAMを
引数に持っていますが、
そういう事じゃないですか?
……WNDCLASSのメンバのpfnWndProcはどの関数だ、ってことだよ……
staticなメンバ関数とそうでない関数がどう違うのか知ってれば普通に渡せるはずないってわかるのに‥‥
877 :
865 :2005/04/25(月) 23:03:44
ものすごいアホな勘違いをしていたかもしれません。 ちょっとチェックをしてみます。結果がわかったら報告します。 とりあえず有難うございました。
878 :
869 :2005/04/25(月) 23:06:58
>>799 どこん方言ば喋ろうが勝手たいね。別によかどが。
880 :
デフォルトの名無しさん :2005/04/26(火) 01:51:01
CreateMutexと if( GetLastError() == ERROR_ALREADY_EXISTS の判断で2重起動を防止するときに、 関連付けた拡張子からのダブルクリック起動だと、 2重起動とみなしてくれないのですが、どうしてでしょうか? (EXEを起動させたのと、拡張子をダブルクリック起動したのと共存してしまう) おしえてください
881 :
863,865,877 :2005/04/26(火) 05:59:43
報告します。 問題のコールバック関数は、本物のウィンドウと関連付けされているわけではなくて、 ただ単に普通の関数として定義されているだけで、 グローバルに定義されているメインウィンドウのコールバック関数のメッセージプロシージャから 普通の関数として呼ばれ、メッセージを丸投げされてるだけでした。 本物の子ウィンドウを作っているわけではなく、 メインウィンドウのメッセージをただ丸ごともらって、 それを自前で処理しているだけでした。 CALLBACKって付けただけでなんかOSから勝手に呼ばれるものかと思ってたんで(この辺の動きはよく理解してないのですが。)、 これが付いてる関数をクラスのメンバにしただけでコンパイルエラーになるのかと思ってたのですが、 特にウィンドウとも関連付けず、普通の関数と同じように定義し(ただCALLBACKと付けてみるだけ) 呼んでみたら普通に呼べました。 ただ、疑問なのは、じゃあなぜわざわざこのソースは「CALLBACK」とつけているのだろう?ということです。 普通の関数として動いてる(使ってる)だけみたいなので、付ける必要がないと思うのですが、 付けるのと付けないのでは何が違うのでしょうか?
>>880 普通そんな挙動はしない。
そんだけの情報では回答は得られないと思う。
>>881 > ただ、疑問なのは、じゃあなぜわざわざこのソースは
> 「CALLBACK」とつけているのだろう?ということです。
つれない答えで悪いが、ソース書いた人に訊けないのん?
オレはコピペしたか何かでたまたま付いちゃってるだけ
だと思うが。
せっかくVCというIDEがあるんだから CALLBACKの定義を検索すればよかったのに
>>880 そんな裏技があるのかと思い、拡張子関連付けて試したが見事に防止された。
Mutex生成する位置が悪いのでは?
GetCommandLine()で得た文字列でmutex生成してると予想
.NET初心者ですが、質問があるのでよろしくお願いします。 目的:VB.NETでドットプリンタのトレイ番号を取得する。 状況:.NETのPrinterSettingクラスを使用してプリンタ情報を取得しようとしたが、 プリンタ固有となるトレイ番号はすべて同一番号(Custom)扱いとなるため、実現不可能。 よってDeviceCapabilities関数のDC_BINSを使用することにし、VB6でテストを行ったところうまくいった。 しかし、VB.NETに乗せ変えたところ、出力バッファに値が入ってこない。 現在のソース: ’---宣言 Declare Function DeviceCapabilities Lib "winspool.drv" Alias "DeviceCapabilitiesA" ( _ ByVal pDevice As String, _ ByVal pPort As String, _ ByVal fwCapability As Long, _ ByVal pOutput As string, _ ByVal pDevMode As String) As Integer Private Const DC_BINS As Integer = 6
888 :
887 :2005/04/26(火) 09:51:41
’---呼出 ' バッファに必要なサイズを取得 intSupportedBinsNeeded = _ DeviceCapabilities(strPrinterDeviceName, strPrinterPortName, intDeviceCapability, vbNullString, vbNullString) ' バッファを確保 ReDim intSupportedBins(intSupportedBinsNeeded - 1) ' 使用できる給紙方法を取得 intWin32apiResultCode = DeviceCapabilities(strPrinterDeviceName, _ strPrinterPortName, _ intDeviceCapability, _ intSupportedBins(0).ToString, _ vbNullString) API宣言時のpOutput、pDevModeはVBではAnyで宣言されていました。 給紙方法取得時のintSupportedBins(0).ToStringがおかしそうです。 暗黙的な変換が出来ないため、string型にして渡していますが意味がないような気がします。 Web等で調べ、いろいろ試しましたがどうも解決できません。 よろしくお願いします。
>>887 こっちはWin32ネイティブのAPIスレだから.NETスレ行ったほうがよろし。
890 :
887 :2005/04/26(火) 12:49:43
わかりました。ありがとうございます。 お邪魔致しました。
俺はMutexでのチェックは成功していてFindWindowで失敗している説を
唱えてみる。
>>880 現在開いているファイル名をCaptionに表示していないか?
んでもって、FindWindowで初期状態のCaptionで検索してないか?
>>880 コードが間違っているか、別のEXEが動いている。
893 :
デフォルトの名無しさん :2005/04/26(火) 18:25:27
クライアント領域に表示したグラフィックをビットマップファイルに保存する方法を教えてください。
>>893 それくらいググって解決できないようじゃきのこれないぞ。
Alt + PrintScr
この先生きのこる
newで割り当てた配列をdeleteしてもメモリリークが凄まじいのですがなぜですか?
delete[]。すれ違い。
[]の付け忘れとかそんな低次元の話じゃねぇよタコ。お前真性のアホか? そんなんだったらコンパイルエラーでわかるだろうがボケ
そんなんでコンパイルエラーは出ませんよ。
903 :
デフォルトの名無しさん :2005/04/26(火) 22:13:15
901 晒し age
うるせぇっつーの。配列で割り当てる以外にnew関数はつかわねぇんだよ
ポカーン
つstd::vector
うほっ!、いいキテガイ!
クラスの配列とかじゃないことを祈る
>>881 コールバックであるということを明示的にするためにあえてつけるという選択肢もある。
急速にスレの質が低下してまいりました
プログラムで最小化ボタンを無効にしたいんだけどどうすりゃいいの?
>>911 超FAQ
GetSystemMenu
EnableMenuItem / DeleteMenu
もう解決したから今更出てくんなよwwwwwww メモリ管理だってwwwwwwカスはmallocでも使ってろよwwwwww
急速にスレの質が低下してまいりました
>>904 >new関数
そうか、newは関数だったのか。(プ
>>914 >メモリ管理だって
>mallocでも使ってろよ
malloc()系しか管理が必要ないと思ってるの?(プ
うわぁ・・・香ばしい・・・関数に突っ込む奴なんてはじめてみたwwwwwwww
おまけにmalloc()系しか管理が必要ってなんだろwwwwwwwww 超意味不明wwwwwwwwwwwwwお前みたいカスにはmallocがお似合いってことなんだがwwwwwwwwwwwwwwwwwwwwwwwwwwww
mallocを使う場合の方が(自分で書く必要のある)メモリ管理コストが大きいわけだが。
急速にスレの質が急速に急速に低下してまいりました急速に
ペタワロスw
ピコワロスw
ヨクトワロスw
>>918 あなたのこと 嫌いじゃないの 嘘じゃないわ ほんとよ
ラ・ウスラ・デラ・ギポン・デ・リルカ・ニョキニョキ ニョキニョキ
>>917 「operator new」をどう訳すと「new関数」になる訳?
リーテ・ラトバリタ・ウルス アリアロス・バル・ネトリール
sizeof を関数といってるようなもんだな。
俺のreturn関数が黙ってないぜ
>>926 シイテ イウナラバ ウィルス
アリアマル バグ ナクナリーヌ
リストビューにチェックボックスをつけました。 チェックボックスを操作しようと思ったのですがチェックボックスのハンドルの取得方法が分かりません。 GetDlgItemを使うのかと思いましたが引数がおかしいのか上手くいきませんでした。 どうすればいいかご教授お願いします。
チェックボックス作成したときの戻り値をウィンドウハンドルに代入。 終わり
>>927 operatorは実装をオーバーライド出来るが、sizeofはできないから
全然違う。
俺のif関数をお見舞いするぞ
>>932 うろ覚えだが、notify じゃないの。間違っていたらゴメン。
937 :
デフォルトの名無しさん :
2005/04/28(木) 11:58:09 CPUがいくつ搭載されているかを調べる方法を教えてください。できればそれがHTかどうかもわかるとよいのですが。