乙
乙です。本スレでも、ペゾルドとともにあらんことを。
5 :
前スレ6 :04/11/26 12:35:58
エラー発生アプリケーション MyApp.exe、バージョン 1.0.1.4、 エラー発生モジュール ntdll.dll、バージョン 5.1.2600.1217、エラー発生アドレス 0x00008e22 はどうやって解決するの?
治して。
sp1かsp2をあててみる。
>>前スレ992 ∀・)<すまん、良く読んでなかった、お詫びにリストボックスのオーナードローの仕方を [WM_DRAWITEMが来たときの処理] DRAWITEMSTRUCT* dis = (LPDRAWITEMSTRUCT)lparam; if( dis->CtlType == ODT_LISTBOX && dis->CtlID == IDC_LIST1 ){ //IDC_LIST1:リストボックスのID FillRect( dis->hDC, &dis->rcItem, WHITE_BRUSH ); //白でクリア if( dis->itemState & ODS_SELECTED ){ //選択されている場合に枠を表示してみる HBRUSH hBrush, hBrushOld; HPEN hPen, hPenOld; hBrush = CreateSolidBrush( RGB(255, 192, 192) ); //枠の背景は薄赤 hBrushOld = (HBRUSH)SelectObject( dis->hDC, hBrush ); hPen = CreatePen( PS_SOLID, 1, RGB( 255, 0, 0) ); //枠は赤 hPenOld = (HPEN)SelectObject( dis->hDC, hPen ); Rectangle( dis->hDC, dis->rcItem.left, dis->rcItem.top, dis->rcItem.right, dis->rcItem.bottom ); SelectObject( dis->hDC, hPenOld ); SelectObject( dis->hDC, hBrushOld ); DeleteObject( hPen ); DeleteObject( hBrushOld ); } SetBkMode(dis->hDC, TRANSPARENT); SetTextColor(dis->hDC, RGB(255, 0, 255)); //好きな文字色に char* text = (char*)dis->itemData; //LB_SETITEMDATA使ってたらこれじゃ駄目よ DrawText( dis->hDC, text, strlen(text), &dis->rcItem, DT_VCENTER ); }
∀・)<リストボックスのリソースをオーナードローにしておくのも忘れないでね
ファイルアクセスを監視するAPIってありますか? (ファイル名や更新日時の監視ではなく) 当方、Win2KSP4です。
ReadDirectoryChangesWとかだっけか?
FindFirstChangeNotificationとか?
↓これなに? (★は「いやー ごめんなさい。」に巻き込まれた模様
>>1 ちょっとあなた誰?次スレはいらないって住民の総意で決めたでしょ?
なければないで単発質問スレが立つだろうし。
>>15 駄目だな。そういう時は
/⌒ ⌒ヽ、
// ノノノヽヽ
〃σ--(-)-(-)
|| ;ミ ω 彡 < ニョガーン
ヽ;ミミミ⌒彡
゙゙゙゙゙"" メンセキ メンセキ メンセキ
って答えるんだ
>>13 pc3鯖が丸ごとあぼーんしたときに行方不明になった。
windowsで以下のコードが期待通りに動きません。どうすればよいでしょうか。 std::string to_string(const std::wstring& str) { std::vector<char> buf(::WideCharToMultiByte(CP_ACP, 0, str.c_str(), str.length(), NULL, 0, NULL, NULL)); ::WideCharToMultiByte(CP_ACP, 0, str.c_str(), str.length(), &buf[0], buf.size(), NULL, NULL); return std::string(buf.begin(), buf.end()); } int main() { std::cout << to_string(L"こんにちは、世界!") << std::endl; }
すみません、VCTK2003で動きました。MetrowerksCodeWarrior8.3のバグのようです。
20 :
デフォルトの名無しさん :04/11/27 14:57:10
こんにちは WinSockで、HTTPS通信をしたい場合なんですが、 getservbyname("https","tcp"); で問題ないでしょうか? httpをhttpsに変えただけですが
>>20 さすがにHTTPSを知ってる奴はおらんとおもう
ほかのスレッドで聞いたほうがいいかもな
>>20 何がやりたいのかわからんが、ポート番号を知りたいだけなら、それでいい。
>>22 HTTPS通信をするにあたり、何か通常のHTTP通信で行う処理以外に何か付け加える必要があるのかどうかを知りたいのです。
誰かご存知ではないでしょうか?
>>23 環境依存でよければAPIもあったと思うが、
そうでないならOpenSSL使うとかする必要があったと思う。
根本的に間違っているぞ
>>23 通信自体なら、ソケット通信のままでいいが、SSL通信するなら
そのパケット自体の解析が面倒。自前でhttpsなんて実装しない方がいい。
証明書の問題もあるし、そもそもサーバーサイドで認証するのか、クライアントサイドで認証するのか
によっても異なる。素直に、OpenSSLとかRSAのSDKとかを使ったほうがいい。
ご返答、ありがとうございます。 OpenSSLを使おうと思います。 もちろん、勉強中ですが。 助かりました。
デバイスコンテキストの概念が分からないのですが 何か理解を増やす説法ありませんか?
描画する場所がプリンタでもウィンドウでもメモリでも 同じAPIで描画できるようにするためのクッション的な役割 ってペゾルド本か何かの本に書いてた気がする。
>>28 windowsを作る側になって考えてみたら?
どうやってアプリ開発者に描画する方法を提供する?
HDCととは ディスプレイやプリンタにハンドルである 例えば ディスプレイが0001番 プリンタが0002番 文字を書きたくなったとき0001番を指定して書けば ディスプレイ上に文字が書ける と私は勝手に解釈してるのですが HDC hdc; 〜 DrawText(hdc, ・・・・) このhdcは番号も何も指定していないのに ディスプレイに文字がかけてしまう 多分根本が間違っていると思うのですが まだWin32APIをはじめたばかりなのでつまずいてしまいまして
>>31 〜の部分でhdcに何も代入していなければたまたま動いているだけだ、忘れろ。
>>31 番号は指定しないけど、GetDC()とかで特定のハンドルは取得する必要があるじゃん?
だから何も指定してないわけじゃないよ。
>HDCととは >HDCととは >HDCととは >ディスプレイやプリンタにハンドルである >ディスプレイやプリンタにハンドルである >ディスプレイやプリンタにハンドルである
35 :
デフォルトの名無しさん :04/11/27 21:03:24
他のプロセスの環境変数を調べるには どういう方法がありますか?
37 :
デフォルトの名無しさん :04/11/27 21:12:44
リッチエディット中の指定行のテキストを取得したいのですが、 EM_GETLINEは使えないのでしょうか? 通常のエディットでは取得できたのですが、リッチエディットでは上手くいきませんでした。 何か特別な処理が必要になるのでしょうか?
すいません、できました。凡ミスでした…。
>>27 ここはAPIスレだからWinInetやWinHTTPでもできると書いておく
エディットコントロール内にあるキャレット(Iの形でチカチカしているやつ)を 最初の文字の前や最後の文字の後ろへ移動させるには どうするのでしょうか
あふぁ
43 :
デフォルトの名無しさん :04/11/28 12:49:30
質問です URLEncoder.encode("書き込む","Shift_JIS")と同等の働きをするWin32APIはありますか? もしなければ、Windowsアプリケーションではどのようにすればいいのでしょうか?(文字列のShift_JIS化) ご返答いただけると助かります。
InternetCanonicalizeUrl
OleLoadPictureでGIFが読み込めるようなのですが、プログラムの事情でフルカラーで取得したいです。 普通に読み込ませてみると256色で記録されるようですが、フルカラーで取得する事は出来ますか? ・・・自分で変換プログラム組まないとダメかな・・・
>>46 CompuServeGIFはそもそもフルカラーではない。256パレットカラーが上限。
>>46 256色のBITMAPとしてロードされてるならBitBltで24bitか32bitのBITMAPにコピーすればいいんじゃないか?
かなり当てずっぽうだが。
>>47 GIFの仕様(というか、元の色数)は関係なく、メモリ上でフルカラーの画像として読み込みたいんですよ
無駄にメモリを食いますが、色数関係なく画像処理をしたいもので……
一度256色やそれ以下で読み込んでから、フルカラーに変換すれば確実なんですが…
>>48 HDCにコピーしてから、HDC→HBITMAP→BITMAP→ピクセルデータって感じですかね
考えたんですが、どうも強引な感じがして…
HBITMAPとして取得出来ているので、SelectObject→BitBltでフルカラーのコピー→コピー先からHBITMAPを取得、って感じですかね
今試してみて、どうも上手く行かない感じです…これはプログラムのミスっぽいので、もうちょっとやってみます
(たしか、SelectObjectで選択したままだと、HBITMAPからピクセルデータが取得出来なかったと思うので、その辺でミスったかも…)
>>49 「HDCにコピーする」とかの表現が怪しいな。
機会があったらHBITMAP,HDC関係を
勉強し直す事を薦める。
とりあえず今回はGetDIBitsを使ったらどうかな。
>>51 ありがとう
SendMessage(hwnd, EM_SETSEL, 0, 0);
これで先頭に移動したよ
でも
SendMessage(hwnd, EM_SETSEL, -1, -1);
これで最後に移動させるつもりだったけど、ダメだった
最後に移動させるには、
あらかじめ文字列の長さを調べてから
SendMessage(hwnd, EM_SETSEL, len, len);
こうするの?
長さを調べなくても、特別な値の引数で移動できるかと思ったけど
>>53 MFCだとこんな感じ。
int pos = mEdit.LineIndex(mEdit.GetLineCount() - 1);
mEdit.SetSel(pos, pos);
MSDN見ればそれぞれの関数がどんなメッセージ投げてるかはわかると思う。
EM_SETSELにおける-1には確かに特殊な意味があるけど、
LastPositionではなくてCurrentPositionじゃなかったかな?
>54は改行で終わってるマルチライン限定だね。
>>54 やはり長さを調べる必要があるみたいですね
>EM_SETSELにおける-1には確かに特殊な意味が
SendMessage(hwnd, EM_SETSEL, 0, -1)
全部選択する
SendMessage(hwnd, EM_SETSEL, -1, any_n)
未選択にする
これくらいで、どちらも、最後に移動させる目的には使えないみたい
何度もありがとう
>>52 おかしな表現使ってましたね。
GetDIBitsをさっき見つけて弄ってる所です……上手く行って無いですけどね…
出来ない…どこが問題があるか分かりますか? というか、GetDIBits自体の使い方か、引数だと思いますが hBitmapはGIFを読み込んだもの //BITMAP構造体を取得…ここは問題なし GetObject(hBitmap,sizeof(BITMAP),&bitmap); dwSize=bitmap.bmWidth*bitmap.bmHeight*3;//24ビットフルカラー //エラー・例外処理は省いているが、エラーは出ていない lpBuf=(LPBYTE)GlobalAlloc(GMEM_FIXED,sizeof(BYTE)*dwSize); memset(&bmpInfo,0,sizeof(BITMAPINFO)); //BITMAPINFOHEADERを返す関数。幅・高さ・プレーン数・色数を指定…biXPelsPerMeterやbiClrUsedなどは0固定 bmpInfo.bmiHeader=CreateBitmapInfoHeader(bitmap.bmWidth,bitmap.bmHeight,1,24); hdc=GetDC(NULL); hdcBuf=CreateCompatibleDC(hdc); //HBITMAPも作って、BitBltをしてみたが、正しくカラー表示された //それを下で選択しても同じ結果だった if(!GetDIBits(hdcBuf,hBitmap,0,bitmap.bmHeight,lpBuf,(LPBITMAPINFO)&bmpInfo,DIB_RGB_COLORS)){ //画像が真っ黒(初期値のまま) } ReleaseDC(NULL,hdc);
>>58 hBitmap が256色のビットマップだから
24ビットカラーを指定した GetDIBits が失敗するのでは?
(NT系なら GetLastError の値を確認してみて)
俺は
>>52 じゃないけど
256色で GetDIBits して、自前で24ビットカラーに変換しろ、
と言ってるんじゃないかな。
>>59 すいません、出来ました。
間抜けなミスしてました。
GetDIBitsは失敗で0、成功で0以外なのに、!付けてて判定が逆になってた…
最初の頃に上手く動かなくて、試しに!つけたの忘れてました…
(エラーで0が返ってた時期があったので)
因みに、自前で変換するなら、GetObjectでパレットも含めて取得出来るみたいです
レスくれた方、ありがとうございました。
(お騒がせしました)
61 :
デフォルトの名無しさん :04/11/29 20:42:46
起動後、5カウント後にフォーカスを戻すプログラムなのですが、 タスクバーが点滅するのみです。(win2k) 何が悪いのか判らないのでおながいします。 static int x=0; switch (msg) { case WM_CREATE: SetTimer(hWnd,NULL,1000,NULL); break; case WM_TIMER: x++; if(x==5){ SetForegroundWindow(hWnd); SetWindowPos(hWnd,HWND_TOP,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE); SetFocus(hWnd); InvalidateRect(hWnd, NULL, true); } break;
フォオオオ。そのものズバリって感じです。 ありがとうございます&試してみます。 ……検索能力が足りないのかorz
フォオオオオオオオオオオオ。 VCが古すぎてSystemParametersInfoの設定に SPI_SETFOREGROUND〜がない。 (自機では)AttachThreadInputだけでも動作しました。 ありがとうございました。
>>64 PlatformSDKとしてきてヘッダとインポートライブラリ差し替えれ
ムフォオオ。良い情報 thanx です。 しかし、ヘタレは自分にはよく判りません。 とりあえずXPSP2 PlatformSDK落として、中身みて、 差し替えれそうならやってみます。
>>66 差し替える (ファイルを入れ替える) んじゃなくて、
IDE の設定で、検索パスを変えるだけのほうが無難だよ。
あんまし自己主張の強いソフト作んなや
69 :
デフォルトの名無しさん :04/11/30 00:20:08
>68 お前には全く関係ない。
おしとやか系好き。
>>69 おいおい、そういう考え方はいただけないよ。
>>68 を一ユーザとしての意見として捉えた方が良い。
もし、それを公開するつもりなら、ユーザインタフェースについてもちゃんと
考えないといけない。
誰に作るにしても、インターフェースはちゃんと考えるのが普通だな (プログラムを組む上での勉強は、この辺も含めてやらないとダメだ)
>71 いや、お前には関係ない。
複数のウィンドウを持つものとかかも知れんし、 あとは作者と使う人の問題でしょ。 「関係ない」もそれに対する反論もここでは蛇足。
ターミナルソフト、teraterm内のlogテキストを、自分が作ったアプリケーションから 取り出すことはできるのでしょうか? SetMessageで、teraterm内にテキスト(文字)を送信することは(WM_CHARを使い)できましたが、その逆で、teraterm内のlogテキストを取り出したいのです。 Win32APIを用いてできる方法をご存知なかたはいますか? いましたら、申し訳ございませんが、教えていただきたいです。 宜しくお願いします。
クリップボードを壊してもいいならWM_COPYを送ってみるとか
TeraTermのソース読めヴォケ
24bitのDIBを、1bit(白黒画像)DIBに変換して表示したいのですが どのようにしたらいいでしょうか?
>>79 メモリDCと1bitビットマップ作ってSelectObjectして
そこに24bitビットマップをBitBlt。
そんなんでいいのか?
APIスレ的な回答はそんなもんじゃないかな・・・ 画像処理スレなら、別だろうけど
転送先がモノクロの場合にStretchBlt/HALFTONEは効くんだっけ? 効けば、とりあえずこれで一発な気が。 SRCとDSTが同じ大きさだとディザ処理省略されるっつー困った仕様があった気もするが。
>>76 TeraTermなら、Log出力機能を含めて結構強力なマクロ言語を搭載している。
それを利用するのが手っ取り早いのではないかと。
#いや、APIでなきゃいけなり理由があるなら話は別だが。
WS_EX_TOPMOSTを付けて起動し、後で外す。
>85 解雇
再雇用
再解雇
過去のスレッドで 880 名前:デフォルトの名無しさん :03/05/06 22:29 質問。 MCIのテストプログラムなのですが、ビルドを行うと、 --------------------構成: mci - Win32 Debug-------------------- コンパイル中... main.c リンク中... main.obj : error LNK2001: 外部シンボル "__imp__mciGetErrorStringA@12" は未解決です main.obj : error LNK2001: 外部シンボル "__imp__mciSendCommandA@16" は未解決です Debug/mci.exe : fatal error LNK1120: 外部参照 2 が未解決です。 link.exe の実行エラー ブラウザ データベースを作成中... mci.exe - エラー 3、警告 0 と、エラーが出ます。<windows.h>はいれてあります。 ほかのリンクか何かに必要なものってありますか? 881 名前:デフォルトの名無しさん :03/05/06 22:31 そのAPIをMSDNで調べれば必要なヘッダとライブラリが書いてあるが とのやりとりがあったのですが、このエラーが解決できませんでした。 どなたか対処法教えていただけませんか?
DirectXでフルスクリーン化されてもアプリでキー入力などの情報を受け取るには システムフックするしかないですか?SetActiveWindowを使ってるけど フルスクリーンされるとウィンドウがアクティブにならないんです。だけど GetDC(HWND_DESKTOP)で描画をしてやるとフルスクリーンの上から描けてはいるんだけど なぜキー入力が受け取れないか疑問なんです。
>>89 >そのAPIをMSDNで調べれば必要なヘッダとライブラリが書いてあるが
必要なヘッダと"ライブラリ"
>>89 どのライブラリをリンクしたのか書いてみそ。
ライブラリはwinmm.libをインクルードしました。 他にもなにか必要なのでしょうか
あと、ヘッダファイルのmmsystem.hをインクルードしています。 連続ですいません
>>93 コンパイラのバージョンと、
ヘッダーおよびライブラリをどこから入手したかを教えて。
コンパイルはVC++6.0です。 初心者なので質問の意味がよくわからないのですが、ダイアログベースでDlg.hのほうに mmsystem.hをインクルードしました。
> 初心者なので もしかしてさ、Debug ビルドと Release ビルドの両方に ちゃんとライブラリを指定した? たとえば、Debug ビルドだけにライブラリを指定しても、 Release ビルドにするとリンカエラーになるよ。
あーほんとだ!すいません解決しました!! どうやらReleaseビルドのほうには設定されていなかったみたいです。 ご迷惑をおかけしました。
99 :
デフォルトの名無しさん :04/12/01 12:46:44
初歩的な質問になりますが、 WM_LBUTTONDOWNのLPARAMは、マウスクリックのxy座標の位置になりますが、 下位ワードがx座標、上位ワードがy座標ですよね。 このLPARAM(Unsigned Int)をこちら側で、座標入力する場合、どのようにすればいいのですか? たとえば、x値が110で、y値が200だとして、 unsigned int ppp;とあるとして、 このpppの下位ワードに110、上位ワードに200を入れる方法(やりかた)を教えて欲しいのですが。 宜しくお願いします。 また、そのようなことを簡単にできる関数はありますか?
100 :
デフォルトの名無しさん :04/12/01 13:02:36
このスレ的にはMAKELPARAMマクロだけど。
MAKELPARAM
102 :
99 :04/12/01 14:05:48
103 :
デフォルトの名無しさん :04/12/01 14:49:50
LOWORD(SendMessage(hEdit, EM_GETSEL, NULL, NULL))や HOWORD(SendMessage(hEdit, EM_GETSEL, NULL, NULL)) で、マウスで範囲指定した位置が取得できるのはわかるのですが、 位置ではなく、「その範囲の文字列」を取得するにはどうすれば良いのでしょうか? (GetWindowTextを使わずに)
>>104 ありがとうございます!早速やってみます。
106 :
デフォルトの名無しさん :04/12/01 23:18:38
Delphiスレで聞いたのですがレスがつかなかったのでこちらで教えてください。 モデムの設定を削除する方法はないでしょうか? 今はキーボードで模擬しているのですが、スマートに削除したいと思いまして。 ネットカフェでの使用を想定しています。
107 :
デフォルトの名無しさん :04/12/01 23:31:32
前の人が片付いていないのに質問すみません 円や四角形を描画する関数を使用していて、 プログラムを開始してからしばらくすると図形の中の色が 透明になってしまいます これは何か特定の原因があるのでしょうか? どなたか回答おねがいします
108 :
デフォルトの名無しさん :04/12/01 23:39:42
>>107 DeleteObject サボってねえか?
109 :
107 :04/12/01 23:47:09
>>108 さん、レスありがとうございます
DeleteObjectは大丈夫でした
放置してもそうなるの?リフレッシュ速度が異常に早くて半透明に見えるとか そういう強烈なオチだったりする?
111 :
デフォルトの名無しさん :04/12/01 23:53:05
放置といいますか・・・途中まではちゃんと描画されるんです あるときを超えると急に中の色が消えてしまいます それと関係ないかもしれないですが、同じ関数を1ループ中に 呼び出す回数を増やすと消えるまでの時間が延びました・・・なぜ・・・
DeleteObjectをしたつもりでされていないとか
ループの外でまとめてDeleteObjectしてるとか
114 :
107 :04/12/02 06:54:47
自己解決しました よくわかりませんが、四角形の周りを描画する関数(中身も描画する関数とは別)のブラシに 色を指定したあと、GetStockObject(NULL_BRUSH)していたのがまずかったようです レスしてくださったみなさん、ありがとうございました //ブラシの設定 ☆//hBrush=CreateSolidBrush(crCOLOR); //中身は描画しない hBrush=(HBRUSH)GetStockObject(NULL_BRUSH); SelectObject(hdc,hBrush); ☆の行をコメントにすると動きました
(−_−) ‥‥。
>>114 そのコメントにした行で作成したブラシをDeleteObjectしたのかと小一時間・・・
DeleteObjectはしてるがその前にSelectObejctでDCから解除してないとかだったら死なす。
てゆうかコメント化前だと、DeleteObject出来ないのが歴然
119 :
デフォルトの名無しさん :04/12/02 11:06:06
質問ですが、 ファイル名を変更したい場合、どのWin32APIを使えばいいのでしょうか?
>>114 色々言われてるが、事後報告があるのは偉い
自作自演という保障も無いな
相手してください。。。
>>128 モデム関連操作のCPLアプレットを逆アセしなされ。
多分適当なレジストリをいじってるだけだからregmonで追いかければいいと思うけどね。
そもそもモデムの設定というのがなんなのかわからない。 それの何をどう削除したいのかがわからない。 最後にネットカフェでの使用というのがもうどう対応していいかわからない。 俺に理解能力が無いのだろう。それは認めよう。 だから俺にも回答できるように質問を1から教えてください。
>>130 多分こういうことだと思う。
ネカフェで自前の携帯/PHS(京ぽんとか)をUSBケーブル経由で接続(&インストール)することで
パケットを拾われないよう通信し、用が済んだらモデム設定(アカウント情報なんかも含まれるし)を
抹消したいと。
んでとりあえずそれらしいキーを捜してみた。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fax\Devices
この下にモデム一覧がある。多分アカウント設定は他所にあると思うけど、もう何年も
ダイアルアップなんてやってない(当然設定も残ってない)ので分からない。
レジストリ内を接続名で検索してみれば分かると思う。
キーが分かったらお決まりのレジストリ操作で多分OK
あー、デバイス情報は
>>132 に挙げたキー以外にも
HKLMSOFTWARE\Microsoft\Ras\Tapi Devices\Unimodem
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\UNIMODEM\DeviceSpecific
HKLM\SYSTEM\ControlSet001\Control\Class\{4D36E96D-E325-11CE-BFC1-08002BE10318}
HKLM\SYSTEM\ControlSet001\Enum\Root\MODEM
HKLM\SYSTEM\ControlSet002\Control\Class\{4D36E96D-E325-11CE-BFC1-08002BE10318}
HKLM\SYSTEM\ControlSet002\Enum\Root\MODEM
HKLM\SYSTEM\CurrentControlSet\Control\Class\{4D36E96D-E325-11CE-BFC1-08002BE10318}
HKLM\SYSTEM\CurrentControlSet\Enum\Root\MODEM
にあった。ControlSetxxxの値は環境によって変わると思う。頑張って消しまくってくれ。
Windowsって意外とタフだから適当に消しても辻褄合わせてくれるよ、多分。
スゲーや。テレパスだ。 ダイヤルアップの設定ねぇ・・・ HKEY_CURRENT_USER\RemoteAccessとか HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Connections なんてのも関連はありそうだがなんか違う感じだしねぇ。
う〜ん、APIでさくさくっとできるわけじゃないんですね。 仰るようにレジストリ解析ソフトを使って削除前と削除後を比較して実行することにします。 ありがとうございますた。
136 :
デフォルトの名無しさん :04/12/03 03:28:57
>>135 よくわからんけどPBKファイルとかRasDeleteEntryとか
関係あるかな?
他のアプリのウインドウをフォアグラウンドにするために、お馴染みの AttachThreadInputしてSystemParametersInfoで0に設定して、 SetForegroundWindowしました。通常は正常に動作しています。 ただし、ターミナルサービスのリモートデスクトップでセッションが切れている 間だとフォアグラウンドにならないようです。これはリモートデスクトップの 制限でしょうか?
138 :
デフォルトの名無しさん :04/12/03 15:40:55
あげ忘れ
別のアプリにOpenProcessされたかどうか判定する方法ってありますか?
>>139 たいていのアプリは別のアプリにOpenProcessされている
141 :
デフォルトの名無しさん :04/12/03 20:36:06
Editコントロールへの入力で 0-9 A-Fのキー(16進数)、及び BS、Delete、Home、End、矢印キー以外のキー入力を 無効にしたいのですが、どうすれば良いのでしょうか Editコントロールをサブクラス化してみたものの、この先がいまいち分かりません
何がやりたいのかにもよるがES_NUMBERつけるだけじゃ不足なのか?
普通アプリケーション上でAlt+Spaceを押すとシステムメニューが表示されますよね。 でも自分で書いてみたプログラム(親ウィンドウ+子ウィンドウ*1)ではなぜか表示されないんです。 Altを押せばちゃんとメニューを開くのですが、Alt+Spaceみたいに同時に押してもうまく反応してくれません。 どうすればよいのか知っている方いましたら、教えていただけないでしょうか。
>>142 すいません、ES_NUMBERだと16進数で扱えなくなってしまうので・・・
ES_NUMBERでも、A-Fとは言わず、せめてコンマが通れば良いのですが
>>143 TranslateMessageが無いとか?
>>145 それでした…。なぜ今まで気づかなかったんだろう…。
それにしても素早いお答えありがとうございました。
>146 まあまあ。解決してよかったじゃないの。
>>141 サブクラス化したウィンドウプロシージャでWM_CHARが来た時、入力されて欲しくない文字だったらreturnし、それ以外の場合はCallWindowProcへ通す。
>>148 つまりOKボタンが押されたり、あるいはフォーカスが
他に移ったとき等に弾くと言うことでしょうか?
またもやすいません、それなら簡単なのですが、
出来れば入力の段階でフィルターかけたいという主旨でして
>>149 やった!見事に出来ました
ありがとうございました、おかげで今日は安らかに眠れそうです
他の皆さんもお付き合い感謝です
>>151 因みに、148のは、エディットからのWM_COMMANDメッセージを調べて、テキストが変化した時に弾くって意味
(文字が入力されたり、削除された時に調べる)
サブクラス化まで進んでるなら、149の方が良いと思う
やってみました。 色々といじらないといけないところが多すぎて危険なので現状のままで行くことにします。
いっそのことKNOPPIXをネカフェに持ち込んだほうがいいかもね
ダイアログボックスのウィンドウサイズをソースから変更する方法を教えてください。お願いします
>>155 実行時に変更するならMoveWindowとかSetWindowPosとか。
メインウィンドウを起動時にフルスクリーンで表示する方法を教えてください。お願いします
すいません、フルスクリーンというか最大化です
枠を消しまくってウィンドウサイズをデスクトップサイズに合わせ、最前面表示
HDC hDC = GetDC(NULL);
ReleaseDC(hDC);
>>157 ShowWindow(hwnd, SW_SHOWMAXIMIZED);
163 :
デフォルトの名無しさん :04/12/04 17:14:00
「猫でもわかる」を参考にしてツールバーにテキストを付けたのですが、 ボタンの幅が一番長いテキストが入っている幅で統一されてしまい、 短いテキストのボタンに無駄なスペースができてしまいます。 これを、IEのツールバーのように可変長にすることはできますか? よろしくお願いします。
> できますか? できます。 > よろしくお願いします。 いやです。
マントヒヒ
ヒントでピンポン
IEのツールバー使えよ
>164 死ねば?
メインウィンドウの色を起動時にまたは最初から変更する方法を教えてください。お願いします
ウィンドウクラス構造体のメンバhbrBackgroundをいぢる
自己解決しました。ご迷惑をおかけしました。
ポートスキャナを作っているのですが、もっと速度を出したいと思います。 やり方としては一番稚拙な、堂々とTCPでconnectしてみる方法なのですが、 listenしていないポートにconnectしようとしてWSAECONNREFUSEDになる場合で、 LAN上のリモートホストで1200回/秒、ローカルホストで1700回/秒くらいです。 CPU使用率が100%になっており、CPUがネックのようです。 socketで作ったソケットに対して、 WSAAsyncSelectでFD_CONNECTを指定し、 connectしています。 メッセージは、MFCのウィンドウプロシージャで受けとって、 MFCのメッセージディスパッチで結果をチェックする関数を呼んでいます。 もっと速い方法はあるでしょうか。
WSAECONNREFUSEDになる場合、connectしてからメッセージが飛んでくるまで1秒かかります。 (これは、非同期ではなく、同期でやった場合も同じです。) なので、メッセージループに余裕がある限り、結果を待たずにどんどん次のconnectをしています。
>176 分からないからってそういう書き込みはしないように。 運営に通報しておきました。
最近、妙に悪意のある書き込みが目立ちますね。そろそろ自制してほしいものです。
自演自己弁護乙!
ウィルス作者が来た場合は通報した方が良いのか?
ウィルスじゃないですよ。 安全確認のためのツールですよ。
ウィルスでなくてもこの手の質問は叩かれて当然だろうが
>>182 そんなことないと思うぞ。ポートスキャナなんてネットワーク管理に絶対必要だろ。
>183 絶対ではない。
>>183 単なるポートスキャナはまあ必要だと思うけど、「もっと速度をだしたい」ってところはどう言い訳するんだ ?
何か物を作るなら、できるだけよいものを作ろうとするのは、 技術者として自然ではないかと。
>186 うむ
悪用する可能性があるものを公的な場で質問したり回答しないのは、社会人としての常識ではないかと。
悪用しようと思えばカッターナイフ一本でも可能。
>189 うむ
>>188 君は「基礎からわかるTCP/IPネットワーク実験プログラミング」の
「はじめに」を読みなさい。
>188 どんな技術も使いようによっては悪用できます。
>>189 誰も作るなと言ってないが ?
そもそも、人に聞いて楽しようと言うところから「堕落」は始まってるぞ。
>>190 > 悪用しようと思えばカッターナイフ一本でも可能。
だから、たとえば空港の手荷物検査でのカッターナイフの隠し方について公的な場で議論するのはあまり勧められない。
別に犯罪でもなんでもないけど、お馬鹿な厨が実行する可能性があるからな。
>>192 > 君は「基礎からわかるTCP/IPネットワーク実験プログラミング」の
> 「はじめに」を読みなさい。
本の宣伝か ?
そうじゃないなら、何が書いてあるか要約を書いてくれ。
そんなこと言い出したら2ch自体もいらない
>194 何が言いたいのか結論をはっきりさせる 癖を付けた方がいいですよ。
>195 人に聞いて楽しようと言うところから堕落が始まってるんじゃなかったのか?
>194 どうでもいいが気に入らなきゃお前が参加しなきゃいいだけのこと。 発言するな。ここを読むな。立ち去れ。
>199 御意。普段人に相手されないからかまってほしいんだろうけど。
>196 まあまあ。まともに相手する必要はないよ。
>>196 > そんなこと言い出したら2ch自体もいらない
?? 別に普通の議論をすればいいだけだと思うけど ?
>>197 理解できないならそう言えば ? (藁
>>198 そうだよ、別にいまさら TCP/IP について精進しようと思ってないから。
(やっぱり、宣伝か...。)
>>199 何いきり立ってるの ?
なんか図星でも突かれたのか ?
>194 >193はさりげなく無視した? どんな技術も使いようによっては悪用できます。 あなたがポートスキャンに特に食いつく理由は何ですか? 選択肢 1. 実はよく分かっていない。 2. ポートスキャンって何か悪いことだって誰かが言ってた。 ちなみにMP3やP2Pといった単語にも同様に反応しているのですか? そうだとしたら大変ですねぇ。
ふぅ・・・202はまたいつもの奴か。
>202 う・・・・ここまで的外れな反論されるとどうしようもないわ。 俺の負け。
ああ、今週はこのスレを潰すんですか。結構、結構。
>205 ID強制表示?今時何を言ってるんだ、こいつは。 まさかお前以外の人間にもIDが見えてないとは思ってないよな、 ID:ID:yn+Vu/R9 君。
ふぅ、アホがいなくなったところで平常営業に戻しますか。
いまさら TCP/IP について精進しようと思ってない!!!
>>203 まあ、サーバの穴見つけるには必要だろうけど、そんなに「高速化が重要」とは思えないだけのことだが。
>>206 で、どこが的外れかも書けないんだよね。
潔く負けを認めてる点は、賞賛に値するけどな。
>>208 ププッ、今時こんなことでビビルとでも思ってるの ?
もしかして、ネットワーク/2ch 初心者なの ?
>>210 偽もんはいらんよ。
>202 うちに来てる協力会社の奴で、マジでこの手の受け答え する奴がいてさー、その会社の営業と本人にボロクソ 言った上で解約してやったけど、はたして本人は少し でも分かってくれたのだろうか。
>203は?
ちなみに、今日はこのトリップつけるから、興味のない人は NG ワードに指定な。 スルーできない奴アフォがはっきりするから。
またかよ
>214 助かる。お前以外にいい奴だな。今日だけじゃなくて永遠にその トリップ付けたらもっといい奴として崇め奉るよ。
トリップ君と>188は同じ人?
>216 以外に→意外に すまん
>>212 ハイハイ、よかったな。
>>213 リロードぐらいできないのか ?
>>217 同じだよ。
だから、気に入らん人は NG ワードよろしく。
うぉぉぉぉ、やっぱ日本語通じてなかったのか・・・ 泣けてくるな。 ↓これ君の発言だよね? 悪用する可能性があるものを公的な場で質問したり回答しないのは、社会人としての常識ではないかと。 ↓これが俺の質問 どんな技術も使いようによっては悪用できます。 あなたがポートスキャンに特に食いつく理由は何ですか? ↓これがあなたの回答でいいの? そんなに「高速化が重要」とは思えないだけ つまり、あなたが重要と思えないから、公的な場で質問したり回答したりするなってことになっちゃいますけど。 いいのであればこれ以上特に聞くことはないですが。
>220 今必死こいてどう開き直ろうか考えてるはず。 そして誰もが相手をしたくなくなるようなビックリするような 開き直りを見せてくれるはず。 さあ期待してるぜ!
>220 >いいのであればこれ以上特に聞くことはないですが。 あのな、それ気付くの遅すぎ。お前みたいのが相手すっから この手のバカを図に乗らすんだろうが。
>>216 さんじゃないけど、トリップ付けてくれてほんと助かる。
半角の"?"をNGに指定するだけじゃ不完全で困ってたところなのよ。
できれば今日だけとはいわずずっと付けてて欲しい…
>>220 > つまり、あなたが重要と思えないから、公的な場で質問したり回答したりするなってことになっちゃいますけど。
論理が飛躍しすぎ。
俺が言いたいのは、
>>194 の
> 別に犯罪でもなんでもないけど、お馬鹿な厨が実行する可能性があるからな。
に尽きるよ。
ポートスキャナは、鯖管が自鯖に使うツールとしては基本的なもんだけど、それには 1200回/秒 ぐらいの性能ならまずまず十分じゃないか ?
まあ、0〜65535 のスキャンに約1分もかかるのは困ると言う用途があるのかもしれないけど、そうなら
>>174 はその用途を書いたほうが意見が得られやすいと思う。
「どんな技術も使いようによっては悪用できます。」って言うのは正しいし、「技術屋としてより高性能なものを作りたい」と言うのもまた正しい。
でも、高性能なメールサーバーが Spam メール製造器になるご時世だから、ちょっとそこらへんも考えてみてねと言うだけのこと。
>>221-222 > スルーできないアフォがはっきりするから。
(よく見たら、
>>214 Typo してたよ。)
犯罪に使えるうんぬんって話があったけど、ウィルスなりそれに順ずるものって作ったりするだけで犯罪じゃなかった?
ポートスキャンはオフホワイト
>224 なんだこりゃ。まったく期待にそぐわない成果物だ。 もういいよ、お前は。
>224 >論理が飛躍しすぎ。 うーん、飛躍してないけどその一言を書けば解決すると思ってるねw
>224 お前何トリップやめてんの?せっかくNG指定してたのに。
>223 同意。今後こいつがどこに噛み付いてくるのか興味がある。
>231 いや、俺のは飛躍してないからこう書けば十分なんだけど。 アホだなぁ
>233 いや、分かってはいるんだけど、自分のレス番号引用して書いてくるから、 なんか反応してあげないと悪い気がして・・・もうやめますけど。
>231 「付け忘れたよ」で済むか、タコ。自分の有害さをもっと考えて 慎重に投稿してくれよ。
トリップ付け忘れたのは悪いが、そのあとに絡んでる
>>232-235 は、
> スルーできないアフォがはっきりするから。
と言うことでいいよな。(藁
>>232 > 俺のは飛躍してないから
君の脳内だけな。
>236 トリップ付けてください。
こりゃ今後も事ある毎にトリップはずしてくるな…
質問しようと思ったけど、そんな雰囲気じゃなさそうですね…
>239 いや、質問すべき
いまさらだけど質問見てみたら
>>174 は質問じゃなくて自慢話だろ
早く気が付いてやれよ
バカ自慢
んじゃあ遠慮なく…。 初歩的なデバッグ方法としてメッセージボックスを表示させているのですが、 一度しか通らないはずの関数の中で、メッセージボックスが無限に表示されてしまいます。 これはメモリ領域の破壊が原因なのでしょうか? WM_COMMAND内にある関数ですので、それが関係しているのでしょうか?
>>245 自前のログファイルに出力するとか
OutputDebugStringでデバッガに出力するとか
PCが2台あるならリモートデバッグするとか
メッセージボックス以外の代替手段もあるよ
>>246 すいません、かなり長いので貼れません…。
が、もしかしたらコレじゃないかってのがあるので、簡単に載せてみます。
/* プロトタイプ */
char* Kansu01(void);
〜略〜
char buff[100];
WM_COMMAND:
strcpy( buff, Kansu01 );
}
char* Kansu01(){
char buf[100];
char *ret;
strcpy( buf, "あああ");
ret = buf;
return ret;
}
かなりアホなやり方かと思います…。
これで致命的なバグが出ることはあるのでしょうか?
>>247 レスありがとうございます。
デバッガの使い方から勉強することになります…。
将来的には必要になってくるので、勉強しておいて損はないですよね。
↑別にWM_COMMANDの中でやる必要はないです。 ただ、この使い方が正しいのか、おかしいのかが知りたいです。
>>181 いいから首釣って氏ねよ
ポートスキャンで安全確認?そんなの寝てる間にでもやれ
自分に対してならそれで十分だろ
>>248 case WM_COMMAND: の前の case 句で break してないとか。
Kansu01 の戻り値がオート変数へのポインタというのはどうかと… せめて、static char buf にしとかないか。
>>252 void Kansu01(char *buf) {
strcpy( buf, "あああ");
}
とかにして、
Kansu01(buff);
と呼び出すとかね。
Kansu01は呼ばれてないじゃんか。
> WM_COMMAND: > strcpy( buff, Kansu01 ); は case WM_COMMAND: strcpy( buff, Kansu01( ) ); のことかと補完して読んだんだけど、 本当に case や ( ) が抜けているのかも?
皆さんレスありがとうございます。
上のソースは「こんな感じ」的に書いたので省略しすぎました。
…が、
>>255 さんがおっしゃるように、本当に抜けている部分があるかもしれないので、
よく確認してみようと思います。
その後、
>>253 さんのような手法に変更したいと思います。
最後にもう一つ聞かせてください。
char buff01[100];
char *buff02 = "いいい";
strcpy(buff01, buff02);
のように、非ポインタ型の文字列(?)と、ポインタ型の文字列を混同させてしまっても問題ないのでしょうか?
省略するのは良いが、省略の仕方が悪いよな。意味が分からなくなってる
>>256 問題ない。それぞれの意味を考えれば分かるよ。
(それから buff01 とかいう命名法はやめたほうが。。。)
>>257 すいませんでした。確かに読み返してみたら意味わからなくなってました。
以後、気をつけます。
>>258 ありがとうございます。もう一度基礎の部分を勉強しなおしてみようと思います。
>258 why?
>>260 命名のこと?そりゃ意味が分かりにくいからさ。
すぐに意味がとれるちょっとした変数なら別にいいんだけど、
01 とか書いてあると2桁までこの変数名が続くのかなと、恐ろしく思ったよ。
>261 へー
>256 サンプルコードの命名までうだうだ言われるのかー
人目につくものはうだうだいわれる宿命。
メッセージボックスのボタンを押す → WM_COMMAND の無限再入ってことはないか
>>261 ハンガリー記法?
ソースだと分かるけど、あれ位の質問用なら良いと思う
そもそも、数字が2桁って事より、ポインタと配列が同じ命名規則って方が気になったけど
(引数を逆にして使ってしまったりして・・・)
WM_KEYDOWNについて質問なのですが、 ウィンドウ(ダイアログではない)上にあるチェックボックスを操作した後に、メインウィンドウのプロシージャにメッセージが来ません チェックボックスやボタンなどの子ウィンドウにフォーカスが移ってもキーメッセージが来るように出来ませんか? キーを押したタイミングさえ分かれば、WM_COMMANDなどでも良いのですが・・・これも来ません・・・ 調べた限り、MFCなら簡単に出来そうでしたがbccなので使えません フック関数やプロシージャの変更はプログラムが複雑になりそうで、出来れば避けたいです 他にも方法を考えているのですが、通常はどのように対処しているのでしょうか
268 :
デフォルトの名無しさん :04/12/06 17:27:24
アプリからスクリーンセーバを起動して、アプリがスクリーンセーバを止めるまで 起動させ続けたいのですがどうしたら良いでしょうか? OpenDesktopで取ってきた"Screen-Saver"のDeskハンドルを使って、EnumDesktopWindowsを 呼び出してWindowハンドルを取得。 このWindowのプロシージャを、WM_CLOSEを無視するプロシージャにSetWindowLongで置き換え たのですが上手くいきませんでした。
ValidateRect関数って何に使うんですか? 使い道がよく分からない。
>>268 マウスやキーボードメッセージを捨ててみては?
すいません。270を訂正します。 その関数名はどこで見た情報から知ったか教えてください。
>>269 最近ValidateRectを使った例から。
自分のウィンドウにスクロールバーをつけたとき、スクロールバーがドラッグされている間は画面は変化せず、
マウスボタンが離されてから、一気にその位置までスクロールするようにした。
するとスクロールバーのドラッグ中は勝手に再描画されるらしく、ウィンドウ内がちらつくようになった。
そこでスクロールバーのドラッグされている間はValidateRectを呼ぶようにした。
これで見事ちらつきはなくなったとさ。めでたし、めでたし。
274 :
デフォルトの名無しさん :04/12/07 00:20:28
COLORREFは、符号有りか無しのどちらでしょうか。 調べると32ビットとは書いてあるのですが。教えてください。 用途としては、文字を表示する関数で、背景色の引数に負を渡した時、 透過して表示とかに使いたいのです。 符号無しだった時は、0xffffffを超えた値を渡した時にする予定です。
typedef unsigned long DWORD; typedef DWORD COLORREF;
>>274 CLR_INVALIDとかなんとかいう定数もあった気がする。
>>275 分かりました。ありがとうございました。
279 :
デフォルトの名無しさん :04/12/07 12:03:30
ProcessIDが判明している状態でProcessにWM_CLOSEとかのメッセージを送るには どうしたらいいの?
EnumWindowsしてGetWindowThreadProcessIdでプロセスIDが一致するウィンドウ全てにメッセージ送付。
インスタンスハンドルというものがあるのですが インスタンスは メモリ上のプログラム これを識別するための番号がインスタンスハンドルだそうなのですが メモリ上のプログラムとはいったいどんな物なのでしょうか?
>>281 ようするに大雑把に言うとメモリにロードされたEXEファイルの中身
大雑把にもなっていない
>283 じゃあ君が教えてあげれば?
285 :
デフォルトの名無しさん :04/12/07 21:12:21
マウスの左ボタンを連打してると WM_LBUTTONDOWN WM_LBUTTONUP WM_LBUTTONDOWN WM_LBUTTONUP WM_LBUTTONUP WM_LBUTTONDOWN …みたいな感じでWM_LBUTTONUPが 複数回連続して送られてくる事があるのですが WM_LBUTTONUPの後にWM_LBUTTONUPは ありえないと思うのですが、これは、仕様なのでしょうか?
286 :
デフォルトの名無しさん :04/12/07 21:18:26
>>285 クライアントへドロップしたときはどんなだっけ?
HINSTANCEってNULLを指定するとどういう意味になるの? HWNDはデスクトップのハンドルと同じ意味になるけど
288 :
デフォルトの名無しさん :04/12/07 23:08:39
DLL
DLL内でWH_KEYBOARDを指定したフックの有効範囲ってSASを除いたSYSTEM全体に及ぶの? それともDeskTop単位止まり?
290 :
デフォルトの名無しさん :04/12/07 23:58:17
ドラッグアンドドロップを設定したのですが。 子ウィンドウすべてにドラッグアンドドロップ属性みたいなのがついてしまいます。 特定のウィンドウにのみドラックアンドドロップ属性を設定したいときはどうすればいいのでしょうか?
291 :
デフォルトの名無しさん :04/12/08 00:00:13
>>291 すみません。ドラッグで検索かけたところみつからないです。
293 :
285 :04/12/08 02:33:50
>>286 「クライアントへドロップ」とは?
試してみれば、わかりますがマウスは移動させてません。
同じ場所で連打していても、WM_LBUTTONUPが複数回
連続して送られてくるのです…。
色々と試してみたのですが、条件がわかりませんが
WM_LBUTTONDOWNを取りこぼす時があるらしいです。
連打しすぎてマウスボタンが壊れたとか
原因がわかりました。 WM_LBUTTONDBCLKがきてました。 WM_LBUTTONDOWN WM_LBUTTONUP (WM_LBUTTONDBCLK) WM_LBUTTONUP WM_LBUTTONDOWN という感じでした。WM_LBUTTONDBCLKの時は WM_LBUTTONDOWNは来ないんですね…。 お騒がせしました。
>>290 IDropTargetを使ってきめ細かく制御すればいいんじゃない?
アクティブでないウィンドウにキーボードイベントを送ろうとしています SPY++を使ってNOTEPADのEditを監視しつつキーボードのAを叩くと P WM_KEYDOWN wParam:00000041 lParam:001E0001 P WM_CHAR wParam:00000061 lParam:001E0001 P WM_KEYUP wParam:00000041 lParam:001E0001 とありましたので、 PostMessage(hWnd,0x0100,0x41,0x1E0001); /*hWndはEditのウィンドウハンドル*/ PostMessage(hWnd,0x0102,0x61,0x1E0001); PostMessage(hWnd,0x0101,0x41,0x1E0001); とした所、Post毎にWM_IME_NOTIFYが発生してaが三回入力されてしまいました キーボードを叩いたときと同じ動作をさせたい場合はどうしたらよいのでしょうか? 勘違い、知識不足があったらご指摘いただけると幸いです よろしくお願いします
なんでkeybd_eventを使わないの?
>298 知らなかったから。
>>298 アクティブでないウィンドウにキーボードイベントを送ろうとしています
keybd_eventはアクティブでないウィンドウにも送れるのでしょうか?
>この関数は SendInput 関数に取って代わられました。
という記述も見ましたが、SendInputでも非アクティブのウィンドウには送れない様なので
SendMessageを使いました
keybd_eventでもウィンドウをアクティブにすることなく仮想キーを送れるのでしたら
ご教授いただけませんでしょうか?
ここ4日間Googleの検索結果と戯れましたが自分には検索できませんでした
302 :
デフォルトの名無しさん :04/12/08 11:31:44
フックについて質問があります。
サービスからキーボードの入力をブロックするプログラムを作成しているのですが、
上手くいかず困っています。お知恵をお貸しください。
行なった事は以下の通りです。ServiceはSystemLocalAccountで動作しています。
1)LogonUserのトークンを取得
2)<
http://support.microsoft.com/default.aspx?scid=kb;ja;173687 >のサンプル
コードを参考にして、ApplicationDesktopと接続
3)1のトークンを使ってImpersonatLoggedOnUser()で偽装(*1)
4)DLL内に作成した関数で、WH_KEYBOARD(*2)とWH_MOUSEを指定してHOOKをかける
5)RevertToSelf()で偽装解除(*1)
6)2を参考にしてApplicationDesktopとの接続を終了
上記の処理で概ねキー入力のブロックは出来ているのですが、コマンドプロンプトが
起動していると、コマンドプロンプト内でキー入力可能な状態になってしまいます。
上記、4のみを行なう通常のApplicationを作成してLogon中のUserAccount上で実行す
ると上記の不具合は、発生しませんでした。
私としては、Logon中のUserAccount上でHookApplicationを実行するのと同じ事をして
いるつもりなのですが、どうにも腑に落ちません。何か間違った事をしてますでしょ
うか?
(*1)元は無かったのですが、UserContextの問題なのかと思い追加しました
(*2)WH_KEYBOARD_LLも試してみましたが、結果はかわりませんでした
>>302 開発環境が抜けていました。申し訳ありません。
"Win2KPro + VC++6"
です。よろしくお願いします。
304 :
デフォルトの名無しさん :04/12/08 12:35:15
WinSockで取得した文字列をTextOutで表示したいのですができません。 何も表示されないんです。 なぜでしょうか? 同じ位置に、TextOutで文字列を直接指定して表示しようとしたらできました。 また、WinSockで取得した文字列をMessageBoxで表示したらちゃんと表示されました。 WinSockで取得した文字列の描画だけが上手くいかないようです。
すいません。精神科に通院中なので変な書き込みをしてしまいました。 無視してください。
>304 ソースを抜粋して見せられませんか?
SendMessage(hWnd,0x0100,0x41,0x1E0001); /*hWndはEditのウィンドウハンドル*/ SendMessage(hWnd,0x0102,0x61,0x1E0001); SendMessage(hWnd,0x0101,0x41,0x1E0001);
>308 これはどれへのレスだ?
>311 おお。スマン
なんで数値直接?
>>297 単にWM_KEYDOWNがTranslateされて、2回WM_CHARが行っただけな気が
その目的ならスキャンコードもいらないでしょ
SendMessageは通らなかった気がする
PostMessage( hWnd, WM_KEYDOWN, 'A', 0 );
PostMessage( hWnd, WM_KEYUP, 'A', 0 );
だね。WM_CHARはいらない。
317 :
304 :04/12/08 13:15:55
>>307 これです。
メニューの項目を選択したときにこの関数が呼ばれます。
>>310 すいません、わかりません。
BOOL MySock(HWND hWnd){
WORD WinSockVersion=MAKEWORD(2,2);
WSADATA wsa;
char *SendData="GET /mytest/My.fj HTTP/1.0\r\nUser-Agent:My\r\n\r\n";
char MyBuf[1024];
char Myip[]="IPアドレス"; //アクセス先のIPアドレス、ローカル鯖でテストしています。
unsigned long ip;
//WinSockの初期化
WSAStartup(WinSockVersion,&wsa);
//ホスト情報の作成
ip=inet_addr(Myip);
LPHOSTENT hostent=gethostbyaddr((const char *)&ip,4,AF_INET);
//ソケットの作成
SOCKET hMySock=socket(AF_INET,SOCK_STREAM,0);
318 :
304 :04/12/08 13:16:44
//ソケットアドレスの作成 SOCKADDR_IN sockaddr; sockaddr.sin_family=AF_INET; sockaddr.sin_port=htons(80); sockaddr.sin_addr=*((LPIN_ADDR)*hostent->h_addr_list); //接続 connect(hMySock,(LPSOCKADDR)&sockaddr,sizeof(SOCKADDR_IN)); //送信 send(hMySock,SendData,strlen(SendData),0); //受信 recv(hMySock,MyBuf,sizeof(MyBuf)-1,0); MessageBox(hWnd,MyBuf,"OKです",MB_OK); //表示 //問題の箇所です PAINTSTRUCT ps; HDC hdc; hdc=BeginPaint(hWnd,&ps); SetTextColor(hdc,RGB(255,100,200)); TextOut(hdc,0,0,MyBuf,strlen(MyBuf)); EndPaint(hWnd,&ps); //ソケットを閉じる closesocket(hMySock); WSACleanup(); return TRUE; }
BeginPaintを何だと思ってやがる。
>319 おまじないでしょ?
>>318 問題の箇所はWM_PAINTで呼ばれるんだよね?
HDC hdc; hdc=GetDC(NULL); SetTextColor(hdc,RGB(255,100,200)); TextOut(hdc,0,0,MyBuf,strlen(MyBuf)); ReleaseDC(hdc);
「同じ位置に、TextOutで文字列を直接指定して表示しようとしたらできました。」 とある。
MyBufの中に'\0'が入ってるんじゃないの?
「また、WinSockで取得した文字列をMessageBoxで表示したらちゃんと表示されました。」 とある。
>>324 俺もそう思ったけど、それだとMessageBoxでも表示されないと思う
MuBufはオート変数だが、実は//問題の箇所です以下は別関数ってこたないだろうなw
とりあえず MyBuf の内容をファイルに出力して あとでダンプ見てみれば
329 :
304 :04/12/08 13:36:49
>>319 クライアント領域に描画するときのあれです。
>>321 >>317-318 の関数内で呼ばれるんです。
>>322 試してみます。
>>323 はい。
TextOut(hdc,0,0,MyBuf,strlen(MyBuf)); を
TextOut(hdc,0,0,"テスト",6); と置き換えると、これはちゃんと表示されるんです。
>>324 えっと・・・
>>325 はい。
MessageBox(hWnd,MyBuf,"結果",MB_OK); で取得した文字列の表示はできました。
>>322 ReleaseDC(hdc)のところでエラーが出ました。
HWND型のを指定しなければならないとか。
パラメータが足りないとも出ます。
>>327 ?
>>328 なるほど。
それをやってみます。
いまいちよく分からんが。 static char MyBuf[1024]; ZeroMemory(MyBuf, sizeof(MyBuf));
BeginPaint・EndPaintはWM_PAINTが送られた時にしか使ってはいけなかったのでは。
そういうことか。。。w
やっぱりな
おいおい > TextOut(hdc,0,0,"テスト",6); と置き換えると、これはちゃんと表示されるんです。 じゃなかったのかよ
「同じ位置に、TextOutで文字列を直接指定して表示しようとしたらできました。」 これはウソなのか?
>>338 うーん……。
偶然なんじゃないか?
WM_PAINTが送られた時以外でBeginPaint・EndPaintを使っても
うまくいく保障はないが、偶然にうまくいく可能性はあるとか。
>>334 なるほど。
これから気をつけます。
>>337-338 ・・・今やったらできませんでしたorz
でも、さっきは4回確認して4回とも表示されたんですけど・・・。
回等してくださった皆様、ありがとうございました。
つまんね
結論:アレゲなやつの質問では、ソース以外信用してはならない。
もっとすごい落とし穴があるのかと思ってたよ
アレゲなんてアイタタ語を使ってしまうやつの言葉は何一つ信用してはいけない
>346 根拠は?
>>346 残念ながら、巡回時にキモい単語が目に付いたから脊髄反射しただけですよ。
アレゲは駄目でキモいとかアイタタはいいのか。 何一つ信用できない感性だな。
アレゲってなに?
>>349 郷に入りては郷に従え、って言葉知ってます?
だから、脊髄反射なんかゆーてるキテガイを相手にすんなって。
そうだよな脊椎反射だよな。
>>341 スレ荒れて面倒だから答える。
recv は、
・もうデータがないとき 0 を返す
・まだデータがある場合は、1以上指定したバッファサイズ以下だけ読み込んで、読み込んだサイズを返す
一回の recv で実際に何バイト読まれるかは状況しだい。recvしてみないとわからない。
っていう仕様だよ。
データを全部読むなら、0を返すまでループでまわしてバッファの後ろに連結する必要がある。
んで MessageBox に渡すなら、最後にNULLキャラクタ( '\0' )を付加する。
クライアント(描画領域)サイズを 640x480 にしたい場合 ウインドウスタイル(枠線やらメニューやら)によって ウインドウ生成時のサイズが変わりますよね 650x510(←てきとう)みたいに大きめに。 クライアントサイズをw*hにしたい場合は、(このウインドウスタイルなら)W*Hで作れるよ。 って数値を逆算してくれるAPIってありますか? 無いなら、それを計算する方法を説明したサイトってありませんか?
>>356 AdjustWindowRect
って、前スレにも同じ質問があったような・・・
AdjustWindowRectEx
大変、申し訳ございませんが、ひとつ教えていただきたいことがあります。 ローカルマシンでなく、ネットワークのマシンで、 プロセスを列挙するようなAPIってないでしょうか? また、そのプロセスがどのユーザで動いているか わかることができればより助かります。 WTSEnumerateProcessesとLookupAccountSidを 組み合わせれば可能であることを確認したのですが、 ターミナルサービスに対応していないと駄目なようなのです。 WinNT Server、Win2000 Server、Win2003上で確実に動作する。 そんな素敵なプロセス列挙APIをご存知ないでしょうか? 教えてくださいこのやろうども。
>>308 >>314 >>315 >>316 レスありがとうございます
>>314 環境がPerlでWin32-APIを使っているもので、変数が定義されていないからです
環境の記入漏れがあって申し訳ありません
>>315 実際は3回行っていました
仰る通りPostMessageにしたら期待通りの動作が出来ました
ありがとうございました
実際のキーボードもこのようにリターンを待っているのでしょうか
>指定したウィンドウのウィンドウプロシージャが処理を終了するまで制御を返しません
と言う記述を見て、キーボードは返り値を待たないのではと勝手に思い込み
この関数は試していませんでした
勝手な思い込みはダメですね、気をつけます
三回入力されていた原因は、WM_KEYUPのlParamを0xC01E0001にしていなかった ミスによるものでした lParamを0xC01E0001にしたところ、二回入力となりました SendMessageではWM_CHARを送らなければ文字は入力されませんでした
そりゃTranslateされないからだべ
>>359 質問の意味が良くわからん。
WTSEnumerateProcessesとLookupAccountSidの使い方が分からんという意味なのか?
>>364 WTSEnumerateProcessesとLookupAccountSidを使って目的は果たせたのですが、
この方法はNTではできないので、NTでもできて欲しいのです。
NTサーバでも動くものもあるのですが、
Windows NT4.0 Terminal Server Edition SP4でないと動かないみたいなので。
無視されるかと思ってたのですがレスありがとう。
ちょっと興味があったんだが、
>>302 の質問って誰も答えられないのか?
うん
>366 このスレのレベルじゃ当然。
>>341 sendのあとで、すぐにrecvすんなよ。
select使えよ。
>>302 漏れは全然この辺知らないので、基本的なところの確認。
・ImpersonatLoggedOnUser はサーバOSでしかサポートされていない。
・CSRSS.EXE は、SeDebugPrivilege privilege が無いとHookできない。
・SetWindowsHookEx は User32.dll とリンクしていないプロセスや、システムサービスをHookできない。
なんとなく上の2つが引っかかってるような気が・・・
>369 理由は?
固まるからじゃねーの?真意は知らんが。
2つのビットマップを異なるパレットで表示したいのですが、 どうしたらよいでしょうか? パレットをあらかじめ2つCreatePalette()で作っておいて、 SelectPalette(hDC, hPalette1, FALSE); RealizePalette(hDC); SetDIBitsToDevice(); /* 1つめのビットマップ */ UnrealizeObject(hPalette1); SelectPalette(hDC, hPalette2, FALSE); RealizePalette(hDC); SetDIBitsToDevice(); /* 1つめのビットマップ */ ではだめでしょうか?
>>289 デスクトップの数だけスレッドを作ってSetThreadDesktopすればいい
377 :
デフォルトの名無しさん :04/12/08 23:24:05
>>374 パレット弄ってもビデオモードによっては意味無いんじゃないの?
>>374 SetDIBitsToDevice に渡している Bitmapinfo に色情報が入っていればちゃんと出るはず。
モーダルダイアログボックスのタイトルバーの文字をGetWindowText関数で取得して それをSendMessage関数でメインウィンドウに送ってるのですが なぜかモーダルダイアログボックスのタイトル文字が変化してしまいます。 GetWindowText(mod,buf,300); SendMessage(hwnd,WM_SETTEXT,0,(LPARAM)buf); modがダイアログボックスです。原因を教えてくださいお願いします
>>379 SendMessage(hwnd,WM_SETTEXT,0,(LPARAM)TEXT("タイトル"));
でも、モーダルダイアログの方が変わるのか?
hwndの値は間違ってないか?
>>380 いまためしたのですがダイアログの方が変わります。値とはなんでしょうか?変数名は間違ってません
ちなみにこれを記述してる場所はダイアログボックスのプロシージャの中です
だからさ、hwndの値がダイアログのものになってるんだろ?
なんでしょうかじゃねえだろ値をもたない変数などねーんだよ
なるほど、知りませんでした。では値を変える方法を教えてください。お願いします
すれ違い
>>386 (゚Д゚)ハァ?、いきなりスレ違いはねぇだろカス。
では引き続き値を変える方法を教えてください。お願いします
君には無理
わからない方の低脳なレスはいりませんので 引き続き値を変える方法を教えてください。お願いします
>379 念じろ。念じるんだ。値が変わるまでこのスレくんな。
調べてみるとウィンドウハンドルの値はすべて同一の値をとっている ようなのでIDとして有効なのはそのウィンドウが存在する間だけのようです。 どうやら、みなさん低脳なようなので自分で模索することにします
>>391 ここの人は丁脳なので、あなたの言ってる事が理解できませんでした。
レスを強制終了します。
変数を知らないでプログラム組めるなんて凄い。
>>393 ( ゚,_ゝ゚)真性の馬鹿はとっとと死ねよww
だからさ、hwndの値がダイアログのものになってるんだろ?
いままでダメな奴いろいろ見てきたけど 変数の値の変え方聞く奴は始めて見た。
>396 お前分かるの?
みんな釣られすぎ
>>379 hwndにメインウィンドウのハンドルを代入(変数の値を変える)してください。
それで解決です。
>399 代入ってどうやるんですか?
すいません。>400は399じゃなくて379でした。 ご迷惑おかけして本当に申し訳ありません。
>>396 言ってる意味全然わかってないでしょボクちゃん?ww
変数の値とかじゃないの。わかる?w
>>399 ( ゚,_ゝ゚)おめーもとっとと死ねよww
解決しました。マジですいませんでした。数々の暴言と無礼をどうかお許しください
許すわけないだろ
>>404 許してほしいと思うなら、なんで解決したか言ってから帰れよ。
>>372 それは逆だス。recvしないから固まるはず。
全部recvし終えてから、sendしないと固まる可能性あり。
ところで漏れの質問はやっぱり無理ッス化。
EXEやDLLを作り出すアプリを作るために必要な情報ご存知ありませんか?
PEフォーマットの話か?
コンパイラ作るのか? それともジェネレータ(だっけ?)作るのか? 同じ挙動で数値(色とか大きさとか)だけ変えるなら、バイナリ操作だけでいけるだろ
>>408 ,409 アドバイスありがとうございます。説明不足ですみませんでした。
ActiveScriptで制御可能なエンジン部があってそれを単一のEXEなりDLLにしたいと
思っているのですが、その後いろいろ調べてみて、以下の方法で行けそうな気が
するのですがいかがなものでしょう?それはダメだとか、普通はこうするだろなど突っ込み
いただけるとありがたいです。
1 .ダミーのリソース(スクリプトやそれが必要なリソースをパッケージしたもの)を含んだ
EXEあるいはDLLのファイルをあらかじめ用意しておく。
2. BeginUpdateResource、UpdateResource、EndUpdateResourceを使って、それを
書き換えるて、新しいEXEあるいはDLLのファイルを作成する。
3. 作ったEXEあるいはDLLのファイルの実行時、FindResource、LoadResource、LockResource
を使ってリソースからスクリプトなどを取得して実行。
>>410 exeファイルに関しては単純にランタイムのexeの後ろにゴミ(スクリプト)くっつけただけってのはよく見る
>>413 WMIのWin32_Processクラス辺りじゃダメかな
ローカルマシンでしかやったことないけど、
WMI自体はリモートマシンにも対応してるはず・・・
リソースに組み込む方法、単純にEXEの後ろに追加する方法、両方で実現できました。 ありがとうございます
メインウィンドウをオーナーウィンドウとしたダイアログボックスで ダイアログボックスを最小化してからメインウィンドウを最小化し 再びメインウィンドウを元にもどすとダイアログボックスも元に戻ってしまいます。 なぜでしょうか?原因を教えてくださいお願いします
417 :
デフォルトの名無しさん :04/12/09 17:44:15
HSPでRPG作りたいんですが、正直難しいと思います。 でもやりたいんです!!僕はHSPでブロック崩し(アルカノイド) ぐらいなら作ったことあります。 今のところ、オープニングまで作ったのですが、どなたか僕に HSPの基礎からすべてを叩き込んでくれませんか?? お願いします。
1 :HSP :04/04/25 23:19 ID:FQRAx6j0 HSPでRPG作りたいんですが、正直難しいと思います。 でもやりたいんです!!僕はHSPでブロック崩し(アルカノイド) ぐらいなら作ったことあります。 今のところ、オープニングまで作ったのですが、どなたか僕に HSPの基礎からすべてを叩き込んでくれませんか?? お願いします。 2 :名前は開発中のものです。 :04/04/26 00:06 ID:Y28g2c6L ぐふっ・・・おまえには・・・すべてをおしえた・・・みんなをまもってくれ・・・・・・・・・ 3 :名前は開発中のものです。 :04/04/26 02:19 ID:PFEeis3S ネタスレですか? 釣られませんよ。
420 :
デフォルトの名無しさん :04/12/09 20:12:39
現在以下の処理をし、ネットワーク共有フォルダのファイルへ 書き込む処理を行っています。 1.WNetAddConnection2 2.ファイル書き込み 3.WNetCancelConnection2 書き込むPCが起動しているときは、問題なく処理できるのですが、 例えばPCの電源が入っていないときは、ネットワークを検索しているのか、 WNetAddConnection2 がエラーを返すのにすごく時間がかかってしまいます。 対策として、秒数を指定しタイムアウトしたいのですが、 設定する方法はあるのでしょうか?
>>378 アドバイスありがとうございます。
Bitmapinfoの色情報がちゃんと入っていませんでした。
(まだ修正して試してませんが)
これから試してみます…
DLL内の関数からCreateThread APIでスレッドを起動するプログラムを 書いているのですが、グローバル変数に保存したはずの値の一部が 消えてしまいます。 まず、以下のような構造体を定義し、グローバル変数としてこの 構造体のインスタンスを1つ用意しました。 // パラメータ struct TEST_PARAM { const char *aaa; const char *bbb; int ccc; const char *ddd; const char *eee; int fff; int ggg; const char *hhh; const char *iii; }; // パラメータ TEST_PARAM *g_pTestParam = new TEST_PARAM();
外部プログラムからはExecTestという関数が呼ばれるようになっており、 この引数にTEST_PARAMへのポインタを受け取っています。 これをグローバル変数pTestParamに保存した後、CreateThread API でスレッドを起動しています。 // 外部から呼ばれる関数 void _stdcall ExecTest(TEST_PARAM *pTestParam) { DWORD dwTestThreadId; // パラメータを保存 *g_pTestParam = *pTestParam; // テストスレッドを起動 g_hTestThread = CreateThread(NULL, 0, TestThread, NULL, NULL, &dwTestThreadId); } // テストスレッド DWORD WINAPI TestThread(LPVOID lpParam) { // ★★★この位置でg_pTestParamのメンバを参照すると、一部の文字列メンバが // ★★★空っぽになっている。 // 履歴検索実行スレッド終了 ExitThread(0); // 履歴検索実行スレッド用ハンドル解放 CloseHandle(g_hTestThread); }
ExecTest内でパラメータを保存した直後にg_pTestParamのメンバを 参照すると全て正しい値が入っていたので保存できたかに見えた のですが、TestThread内の★★★の位置でg_pTestParamのメンバを 参照すると、一部の文字列メンバが空っぽになっていました。 そもそも*g_pTestParam = *pTestParam; という書き方がまずいのでしょうか。 メンバは整数とポインタだけなのでOKかなと思ったのですが。 おかしいところがありましたらご教授お願いします。
すいません。訂正します。 誤)グローバル変数pTestParam 正)グローバル変数g_pTestParam
>>422 aaa とかの指してる中身もコピーして保存しておけ。
strdup とか使う場合には _beginthreadex を使え。
Cライブラリを一切使わないならCreateProcess で良いけど。
>426 ありがとうございます。やってみます。
お騒がせしました。動きました!ありがとうございました。
現在のOSのバージョン・SPの適用状況はGetVersionExで取得できますが、 ほかにインストールされているOSやCD-ROMのバージョン・SPの適用状況を取得するには どのようにしたらよいでしょうか?
CD-ROMのバージョン?
現在起動してるOSではなく、ドライブ上にただ存在しているだけのOSの 種類やバージョンを知りたいって事?
ext2やext3(その他色々)も読まなきゃならんのか?
VMwareとかがインストールされていて その中にOSがあったらそのバージョンを 知りたいんです。
( ´_ゝ`)フーン
何にせよ、「Win32API」の範疇の話では無いな。
よくしらんがVMwareってディスクイメージをWindows上の単一ファイルとして イメージ作ってたりすんじゃないの? そうでないものはひたすらファイル読みまくってDLLのバージョンリソースでも チェックしたら?
すいません、OSというのはWindowsのことで、CD-ROMとはインストールCDのことです。 IEは特定のファイルからバージョンを取得できるのですが、 Windowsそのものについてはそのような方法を見つけられませんでした。 GetVersionEXも何らかのファイルのバージョンを返していると思うのですが、わかる方いませんか?
version.dllとか?
Windowsのバージョンって、プロンプトでverって打ったら出てくる文字列でOKか? 取得する関数があったり、レジストリからチェック出来たり、色々方法があった気がするけど
CDのディスクラベルじゃないのか?
↑ボリュームラベル
445 :
デフォルトの名無しさん :04/12/10 21:04:05
細かいこと言い出すと DLL のサイズだの CRC あたりまでチェックせにゃならんなw
またまたすいません。
>>429 ではAPIがあるかもと思って書いたのですが、
レスを見てなさそうだったので
>>437 で言い直しました。
>>438 >>440 ありがとうございます。でもSPの取得までは無理そうですね・・・
>>439 MSIというのがよくわかりませんが、たぶん違うと思います。
>>441 それならGetVersionExでできるのですが・・・
>>443 ボリュームラベルならGetVolumeInformationで取得できてます。
スレ違いになってきたので逝ってきます。スレ汚しすいません。
447 :
デフォルトの名無しさん :04/12/11 04:16:18
カレントディレクトリを移動する方法を教えてください。
>>446 サービスパックとかの情報か。レジストリに検索かけてみたら、
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Updates\Windows XP
に、サービスパックとホットフィックス情報があるっぽい
>>447 _chdir()
ワイド文字版がよければ
_wchdir()
>>447 SetCurrentDirectory() もよろしく
日本語を含む文字列の中から日本語を検索するときは strstrじゃなくて_mbsstrじゃないとまずい?
まずい strstrでは予期せぬ物がヒットする可能性がある。
せっかくだから _tcsstr にしたほうが。
Shell APIのStrStrではどうだろう。 (IE4以降が必要になるけど)
>452 そうなんですか。どういう場合にNGになるんでしょうか。
2バイト文字を含む場合
char *p = strstr("予約", "\\");
あ、日本語を検索する時の話か。スマソ。
>>458 は忘れて。
>457 試しに "aaaaaaあいうえおbbbbb" の中から "あいうえお" を 検索してみたら問題なかったのですが、例えば特定の文字コードを 含む文字が含まれているときはうまくいかないことがある、 みたいなことなんでしょうか。
>>460 char *p = strstr("例文", "癜");
たとえばこんなのがヒットしてしまう。
おっと補足。
>>461 は文字コードがShift_JISの場合だからな。
>461 おお、ありがとうございます。文字コードで見ると 97 E1 95 B6 から E1 95 を 探すからヒットしちゃうってことですね。
>463 この辺の問題が_mbsstrにすれば解決するんですかね。 ちなみに>453さんの_tcsstrはどういうときに使うのでしょうか。
>449>450 ありがとうございました。
そういえば、Win32プログラムを作ってて カレントディレクトリを気にすることってあまりないよね。
>>467 カレントディレクトリをリネームとか
削除しようとすると問題になるよ
>468 >467が言っているのはそういうことじゃないと思う。
>>468 そもそもそんなどんなときにそんな事態が発生するというのか
フルパスで指定しなければ、ファイルを開くのもディレクトリを操作するのも カレントディレクトリを対象にするんじゃないか?
>>416 >>454 自信ないけど、たぶん仕様だと思うよ。
俺も昔、同じ現象に悩まされたことがあって、結局オーナーをNULLにすることで解決したような…
>>471 そうだよ。でもたいていフルパスで指定するよねって話だと思う。
474 :
デフォルトの名無しさん :04/12/11 18:41:13
フルパスじゃないと基準がないしな。 一度ファイルオープンダイアログ開いた時点でカレントはそのフォルダにチェンジされちゃうしな。 ところでアプリケーションがある位置をアプリ起動時にカレントのフルパスを保存することで とっといてるけどこれってまずい?
Win32プログラムというかGUIプログラムってことなんだろう。きっと。 Win32だったとしてもコンソールアプリは普通カレントディレクトリを基準にするっしょ
>476 なんで?
ダイアログはレジストリを見てる カレントではない
>>477 アプリが存在するディレクトリとカレントディレクトリは一致しないから。
簡単に試せる方法としては、アプリのショートカットファイルをつくって
そのプロパティで作業フォルダを変更してみること。
>479 なるほど
>>479 じゃあ、アプリケーションの位置ってどうやって特定すればいいですか?
>>481 GetModuleFileName(NULL, filename, length)
>482 さすが!
>474etc それって恥ずかしくないか?
BOOL GetOpenFileName(LPOPENFILENAME lpofn); みたいに、ポインタをダイアログに渡して、そのポインタ先にデータを取得するダイアログってどうやって作ってるんですか? int DialogBox(HINSTANCE hInstance , LPCTSTR lpTemplate ,HWND hWndParent , DLGPROC lpDialogFunc); には、ポインタを渡せるような引数は無いのですが…
DialogBoxParam()
488 :
デフォルトの名無しさん :04/12/11 23:15:44
>>486 487 の提案が順当な線だが、
WM_INITDIALOG でオーナーに SendMessage という手もある
>>487 おお、こんなのがあったのか。DialogBox使ってどうやるのかずっと考えてた
ありがとうございます。
>>488 モーダルダイアログって、親ウィンドウはキー入力とか受け付けなくなるけど、SendMessageは受け付けるんですか?
自分では、GetWindowLongのGWL_USERDATAとかみたいに、関数使って無理やり保持させる方法とか考えてた…
>>489 逆にダイアログから親ウィンドウへSendMessageするっていうこと。
>>489 DialogBox() とか DialogBoxParam() は、内部に独自のメッセージループを持っているので、
親ウィンドウのプロシージャもずっとメッセージを受け取れる状態になってるよ。
>>414 ↓のコードでWMIを使ってやってみたらローカルマシンでは動作しました。
ServerName = "\\Optiplex-Gx1"
Set ServiceSet = GetObject("winmgmts:" & ServerName).ExecQuery("select * from Win32_Process")
for each Service in ServiceSet
Call Service.GetOwner(strOwner, strDomain)
WScript.Echo Service.Name & "," & strDomain & "\" & strOwner
Next
Set Service = Nothing
Set ServiceSet = Nothing
これをリモートマシンでも試してみます!
ありがとうございます!
>>490 それは分かってたんですが…
>>491 メッセージ自体はOKなんですね。参考になりました。
(たぶん大丈夫だけど、メッセージは一切受け付けないつもりで実装してたんで、特定の動作で不都合が出てきてりするかも…調べてみます…)
RasHangupで回線を切断させるのに15秒くらいかかってしまうのですが、 これってもっと時間短縮できないのでしょうかねぇ。 接続元の環境はWinXPマシンにINSボード突っ込んで、ISDN回線使ってます。 接続先はYAMAHAのルータです。
それはわざと時間掛かるようになってます。
>>495 あー、そうなんですかぁ。残念。
レス、さんくすです。
497 :
デフォルトの名無しさん :04/12/12 10:23:12
すいません初歩的な質問です。 ネットワークコマンドでnbtstatがありますよね。 このコマンドの中で動いてるAPI関数を知りたいのです。 Pingなどの中身は自力でわかったのですが どうしてもわかりません。
>497 >Pingなどの中身は自力でわかったのですが すげー。よければ教えてください。
>>498 パケットキャプチャーすれば、わかるだろ。
IP Helper APIの組み合わせでできるんじゃないかな。 arpもつくれるはず。
>499 え?パケットキャプチャーでAPI関数の名前が分かるんですか?
>>501 分からない。
デバッガか逆アセンブラを使うとよい。
デバッガではOllyDBGがオススメ。
逆アセンブラではdiswinやdispeが主流。
どれもフリーソフトなので試してみれ。
ま、APIの名前が知りたいだけならメモ帳で開いたら分かるけど。
最近のパケットキャプチャーは使ってる API まで表示してくれるのか、すげーな。
>>497 とりあえず、nbtstat.exe の中からそれっぽい文字列をひらってみた。
WSOCK32.dll ws2_32.DLL MSWSOCK.DLL USER32.dll ntdll.dll MSVCRT.dll ADVAPI32.dll KERNEL32.dll
HrLanConnectionNameFromGuidOrPath netman.dll system\currentcontrolset\services\netbt\parameters
\Device\NetBt_Wins_Export WSOCK32.dll OemToCharBuffA USER32.dll vsprintf NtClose sprintf atoi
isprint memmove RtlUpcaseUnicodeStringToOemString RtlInitUnicodeString RtlFreeAnsiString strncpy
RtlUnicodeStringToAnsiString RtlFreeUnicodeString NtCreateFile RtlAnsiStringToUnicodeString
RtlInitString NtWaitForSingleObject NtDeviceIoControlFile RtlExtendedLargeIntegerDivide ntdll.dll
exit _write _exit _XcptFilter __p___initenv __getmainargs _initterm __setusermatherr _adjust_fdiv
__p__commode __p__fmode __set_app_type _except_handler3 MSVCRT.dll _controlfp RegCloseKey
RegQueryValueExA RegOpenKeyExA ADVAPI32.dll WideCharToMultiByte MultiByteToWideChar
Sleep GetProcAddress LoadLibraryA FreeLibrary LocalFree LocalAlloc FormatMessageA
KERNEL32.dll CharToOemBuffA exe\nbtstat.dbg
504 :
デフォルトの名無しさん :04/12/12 11:32:17
>>500 他のPCのOSの種類とユーザー名を
取得しようと思ってるのですが、
APIがまだ見つかりません・・・
ネーヨ。 そんなもん。
(´゚c_,゚` )まぁまぁ
507 :
デフォルトの名無しさん :04/12/12 13:10:26
今gtk+で音声を再生させるプログラムを作成してるとこなんですけど、わかる人がいたら教えてください。フローチャートでできるだけわかりやすく書いてくれたらありがたいです。
PlaySound()というAPIを一回呼ぶだけでOK
>>507 >フローチャートでできるだけわかりやすく
殺意がわいたw
>509 理由は?フローチャートで分かりやすくよろしく。
まず本人がフローチャートで回答用テンプレを用意すべきだな
┌───┴──┐ │PlaySound ( ) │ └───┬──┘
釣られすぎだゾ
515 :
497 :04/12/12 15:31:33
>>514 それは何でしょうか?
初心者なんで変な質問してしまいすいません。
ただたんにネットワーク上の他端末の端末名やワークグループ名を
取得したいのですけどnbtstatコマンド以外で
可能なのか知りたいのです。
>>515 どんなDLLに依存(ディペンデント)しているか見るツール。
なんでdependsを真っ先に挙げないのか不思議なスレですね。 Windowsのリソースキットに、プロセスが呼び出しているAPIを調べるツールがあります。
>>516 なんでそんな無駄にスレが伸びそうな教え方するんだ。
アプリケーションが外部DLLのどんな関数に動的リンクしているか調べるツール これでnbtstatを調べれば、nbtstatがどんなAPIを使用しているかすぐにわかる
現在、VBでEXEを作成し、VC++でVBEXE用のDLLを作成。 そのDLLの中で画面の物理的なサイズを取得しようとしたのですが画面の解像度を変更するたびに物理サイズもそれに伴い色々変わってしまいます。 私が考えていた結果では解像度に関係なく物理サイズは同じ結果となるはず・・・。 私の使い方が悪いのでしょうか? どなたか教えていただけないでしょうか? <コーディング> w_hdc = CreateIC("DISPLAY", NULL, NULL, NULL); w_ret = GetDeviceCaps(w_hdc, HORZSIZE);
>>521 >私が考えていた結果では解像度に関係なく物理サイズは同じ結果となるはず・・・。
ならない。
以上。
現在、VBでEXEを作成し、VC++でVBEXE用のDLLを作成。 そのDLLの中で画面の物理的なサイズを取得しようとしたのですが画面の解像度を変更するたびに物理サイズもそれに伴い色々変わってしまいます。 私が考えていた結果では解像度に関係なく物理サイズは同じ結果となるはず・・・。 私の使い方が悪いのでしょうか? どなたか教えていただけないでしょうか? <コーディング> w_hdc = CreateIC("DISPLAY", NULL, NULL, NULL); w_ret = GetDeviceCaps(w_hdc, HORZSIZE);
>>522 インチ当たりのピクセル数から割り出す方法を使うのでしょうか?
もっと簡単な方法は無いのでしょうか?
知っていたら教えていただけないでしょうか?
>>515 > ただたんにネットワーク上の他端末の端末名やワークグループ名を
> 取得したいのですけどnbtstatコマンド以外で
何がしたいのか今ひとつ掴めないがnet view 相当でよければ
WNetEnumResource あたりとか。
Comctl32.dllやcommctrl.hなどの最新のものはどこからダウンロードできるのでしょうか? Microsoftのサイトをかなり探したのですが、どれをインストールしても更新されませんでした。
>>527 Comctl32.dllは最新のIEやそのパッチをあてればいい。
commctrl.hは
>>2 のPlatform SDKから
>>528 ありがとうございます
早速いってみます
530 :
デフォルトの名無しさん :04/12/12 17:48:05
>524 1ピクセルの物理的な寸法を得る手段がないので あきらめるしか無いヌー あるいは、ユーザーに「ディスプレイの正確なdpiを計測してください」と頼むか。
531 :
デフォルトの名無しさん :04/12/12 18:08:34
>>530 アプリごとに実装してたらスーパー馬鹿野郎だな
そーゆーのはOSが持つべき機能
>531 穏やかに行こうぜ。
すいません、もう一つだけ質問させてください Platform SDKをダウンロードして Program FilesフォルダにMicrosoft SDKがフォルダが出来たのですが、 この中身のLib、includeを全て適当にコピーして使ってもいいものなのでしょうか? 何か正しい使い方がありましたら教えていただけませんか?
>>533 コピーするのではなく、インクルードファイルのディレクトリ設定や
ライブラリファイルのディレクトリ設定を追加するほうがいい。
既存のディレクトリよりも優先されるように順番に注意すること。
>>534 分かりました、本当にありがとうございました
536 :
デフォルトの名無しさん :04/12/12 19:15:46
教えてください. プログラムが実際に消費した時間を計測したいです. 今のところ GetProcessTimes() や GetThreadTimes() を使って ますが,Win95系のバージョンでは使えないので困ってます. よろしくお願いします.
>536 「実際に消費」というのはもっと具体的に言うとどういうこと? 実際にかかった時間のこと?
538 :
デフォルトの名無しさん :04/12/12 19:40:39
>> 537 実際に CPU を使用して計算した時間を知りたいです. いわゆる elapsed time のほうではないっす.
BCCで簡単な画像編集アプリを作りたいんですが 一般的なキャンバスの仕組みが分かりません。 灰色の背景に白地のキャンバスエリアだとして、ただ白の短形を描画して その上から線を引くとしたら白の短形を再描画した時消えるし どう作ればいいのでしょうか? 保存する時はクライアントエリア上に直接描かれた絵を1ピクセルずつ色を キャプチャして保存するような感じでいいのですか? リンク探しても、それっぽい内容が見当たりません。 どなたか教えてください。
たんけい選択
短形
たんけいコピー
短茎
544 :
デフォルトの名無しさん :04/12/12 19:58:37
マジワロタ
ググったら結構見つかったよ、短形(w
(・∀・)タンケイ!
>>530 おっしゃる通りみたいでした。
dpiから画面の物理サイズを計測してみたんですが、やはり同じでした・・・。
実際のサイズを知る手段が無いみたいですね。
ありがとうございました。
巨と豆の区別もつかないらしい
ホントにたんけいだと思ってる奴は俺の周りにも 結構いる。仕方ないよ。
巨乳と豆乳の区別はつくぞ。
∩(・ω・ )∩ 短形 ばんじゃーい
あれ? 四角形って短形って言わんのか(;´Д`) >547 ググったけどよく分かりません。「ちらつきをなくす効果」ですよね? 白地に線を引く(Ellipseなどでマウスクリックで描画し続ける)としたら 白を再描画するとクリックした位置はユーザー任意なので線が消えてしまうって事なんですけど。 位置を記録したとしても、描くほど動作が不安定になりそうだし。
市販のライブラリでも使っとけ。 で、四角形は矩形(くけい)だ。
>553 >あれ? 四角形って短形って言わんのか(;´Д`) どんまい。俺も最初読めなかったよ。 学校で習わないもんな。
556 :
デフォルトの名無しさん :04/12/12 21:14:14
>>553 線を追加するたびに、キャンバスのイメージを
バッファ(HBITMAP)に保存しといて、
WM_PAINTが来たときには、バッファの内容を描画する。
>554 ドウモゴシンセツニ。 >555 もう短形でもいいじゃん。 >556 してるじゃん。 >557-558 ありがとうございます。 理屈は何となく理解できました。
BCCを使っています SendInputとかの関数の中身(どうコーディングされているか)を見たいのですが、 WinAPIを使うときにインクルードしているファイルを見ても SendInput( IN UINT cInputs, // number of input in the array IN LPINPUT pInputs, // array of inputs IN int cbSize); // sizeof(INPUT) としかなっていませんが、実際の動作はCではコーディングされてないのでしょうか? どんな動作をしているのか見たいのですが、そのような時はどういう風に調べれば よいのでしょうか ヒントだけでもいいので教えてください 検索方法が悪いのか、たいした情報が出てきません・・・
申し訳ありません、名前欄は無視してください (;´Д`)
>>561 好きなの選べ。
・インターフェイスと動作が分かれば十分。MSDNで調べる。
・あきらめる。
・MSとNDA結んでソース見せてもらう。
・リバースエンジニアリングしてもいい国に行く。
・Wineみたいな互換ライブラリの実装から類推する。
>>561 実際のコードは%WINDIR%\SYSTEMの中にDLLとして収められている。
(MSDNのSendInputの項を見ると「インポートライブラリ:user32.lib を使用」と書いてあるのでSendInputはUser32.dllにある)
当然Cのソースコードとして読むことは不可能。
せいぜい逆アセンブルするまでしかできない。
すいません。どうかしてました。訂正します。 私の拙い知識で思いつく限りでは、以下の方法が考えられます。 ・インターフェイスと動作が分かれば十分。MSDNで調べる。 ・あきらめる。 ・MSとNDA結んでソース見せてもらう。 ・リバースエンジニアリングしてもいい国に行く。 ・Wineみたいな互換ライブラリの実装から類推する。
566 :
497 :04/12/12 22:59:39
教えていただいたツールを使って NBTSTATを解析して調査してみます。 すごく・・・便利なルーツですね。
ここはマ板じゃないんだけどなぁ・・・ネタは程々に。
>566 ルーツ?
570 :
デフォルトの名無しさん :04/12/12 23:45:19
くんたきんて
netstat ≠ nbtstat
574 :
497 :04/12/13 00:18:49
みなさん、いろいろすいませんね。 自分の組織にあったネットワーク管理ツールを作ってまして VC言語の作り方忘れたので、VB6でAPI使ってます。 マルチプロセスで動かすのでちゃんと動くか怖いですけどね。
578 :
497 :04/12/13 01:00:09
うちの組織にあったDBで管理できるものもないし、 自分の勉強の為ででもあります。
579 :
デフォルトの名無しさん :04/12/13 01:48:10
自分が食ってるメモリを取得する方法はあるかね
>>563-564 レスありがとうございます
良くわかりました
Wineっていうのを調べてみます
ありがとうございました
582 :
デフォルトの名無しさん :04/12/13 07:12:02
ShellExecuteとCreateProcessを使って 他のプログラムを起動しているのですが、 メモ帳が「notepad」で開けるのですがこれは何故でしょうか? IEをプログラムの名前だけで開きたいのですがどうすればいいでしょうか?
>582 パスが通ってるから。
584 :
デフォルトの名無しさん :04/12/13 07:36:03
>>583 それはどこかに定義してあるのでしょうか?
また、IEの場合はなんといれればよいのでしょうか?
>>579 GlobalMemoryStatus(Ex)
EnumWindowsをコールして、コールバック関数内では GetWindowThreadProcessIdを使ってプロセスIDを求めたいんだけど、 なぜかGetWindowThreadProcessIdで異常終了してしまう OSはWindows2000 心当たりある人いませんか?
_beginthread(あるいは_beginthreadex)が返すハンドルに対して SuspendThreadやResumeThreadを使うのはOKなんですか? 一応期待した挙動はしているみたいなんですが、 MSDNにはそれらしい記述が見つからないので教えてプリーズ。
C ランタイム ライブラリのデータ構造体へアクセス中のスレッドがあって、 それの完了を待っている複数のスレッドが存在する場合に SuspendThread を使うと、 デッドロック状態になります。
>>591 _beginthreadexの方でも?
解決する方法はありますか?
C ランタイム ライブラリを呼ばないとか呼ぶときは排他制御するとかの泥臭い方法しかないですか?
>>592 ISBN4-7561-1404-0
198ページ
>>592 スレッド管理する場合は、
もっと大きめの単位で待ち合わせとかするのが普通のような気が。
先方が何してるんだかわからない状況で SuspendThread は乱暴・・・
というかそんなパターンあまり便う場面なくない?
そもそも SuspendThread() 自体が、よほどのことがない限り使っては いけない API です。使いこなすのは難しい。
>
>>596 確かに。自分自身をSuspendThreadするってケースでしか使わないなぁ・・・
>>587 ソース見せて。
CALLBACK キーワードがついてないとか?
VB6.0で作った画面からVC6.0で作ったDLLを呼び出す際、 引数にVBの関数のポインタを渡し、DLLからそれを コールするような処理を書いてみました。 問題なくコールできたのですが、DLL内でスレッドを生成し、 そのスレッド内からコールすると、「ハンドルできない例外」が 発生してしまいます。このような呼び出し方はやっては いけないことなのでしょうか。
>599 ちなみにデバッグで起動すると問題ないのですが、 VBでexeを作って起動すると失敗します。
>599-600 すいません。勢い余ってここに投稿してしまいましたが、 よく考えたらスレ違いでした。>599-600は取り下げ させてください。VBスレの方で質問しなおします。
DLLで生成したスレッドから何をコールしたんだろう(´Д`;) VBスレのほうではちゃんと質問内容を明確にしてね
VBの関数かorz
VB6はSTAなんだな。
>>586 それでやったんですができませんでした。
ファイル名を指定して実行するウィンドウではそれで起動できるのですが、
ShellExecuteやCreateProcessだと起動しませんでした。
CLSIDを"CLSID_InternetExplorer"に指定して CoCreateInstance()を呼べばいいと思う。
QueryPerformanceCounterについて教えてください。 Googleで検索すると、さも当たり前に使うAPIのように紹介されていますが、 MSDNライブラリの注意書にあるとおり、私のPCではサポートされていませんでした。 これが普通に使える方、どんなハードウェアを使っているのか教えてください。
インストールされているハードウェアが高分解能パフォーマンスカウンタをサポートしている場合は、 TRUEを返します。それ以外の場合は、 FALSEを返します。拡張エラー情報を取得するには、 GetLastError関数を使います。
609 :
デフォルトの名無しさん :04/12/14 03:42:14
610 :
デフォルトの名無しさん :04/12/14 08:48:52
サービスのことで質問があります。 メモリマップドファイルでユーザー権限で動いているEXEと通信しようとしてるのですが、 MapOfViewの段階で失敗します。 両方とも通常のアプリなら問題は発生しません。 環境はW2kPro+VS.NET2003、サービスはATLウィザードで作ったものほぼそのままで、 メモリマップドファイルを作成するロジックのみを追加しています。 よろしくお願いします。
>>607 QueryPerformanceCounterがサポートされていない
>>607 の
ハードウェアも教えてほしい。
>>611 3台試しました
1台目
CPU : AthlonMP (Palominoコア)
マザーボード: TYAN TigerMP (BIOS 1.05)
HALはACPIマルチプロセッサです
2台目
CPU : Pentium3 (Coppoermineコア)
マザーボード: 不明 hp Visualize X-CLASS
HALはACPIマルチプロセッサです
3台目
CPU : Pentium4 (Northwoodコア)
マザーボード: Intel D845GERG2-LK (BIOS P12 (RG84510A.86A.0022.P12.0211151511))
HALはACPIユニプロセッサです
RDTSC命令を直接叩いてみます。
デュアルのマシンはプロセッサのアフィニティを設定しないとヤバそうですね。
彼は寝たっぽい
>>612 コーディングが間違ってるって事はない?
Windowを最初から最大化した状態で起動したいのですが、 SW_SHOWMAXIMIZEDを使わずにやる方法は無いでしょうか SW_SHOWMAXIMIZEDだと、初期化前に表示しちゃうもんで… SW_HIDEMAXIMIZEDなんてのがあれば良かったんですが
>>615 初期化してからShowWindowすればいいじゃない
>>616 それが、初期化の際、最大化した状態でのWindowの情報が色々欲しかったりで。
別に初期化前に見せてしまっても良いのですが、どうにも見栄えが悪いんですよね。
>>617 サイズが必要な初期化は WM_SIZE でやればいいのでは?
(WM_SIZE は cx = cy = 0 で呼ばれることあるから注意)
すいません、次のようになっちゃうのがそもそもの悩みでして
初期化は絶対しなければなので初期化する
>初期化後に最大化
>WM_SIZEでまたサイズ変更処理(初期化の処理と一部かぶる)をしなければ
そんなわけで、上手く最大化して起動できれば二度やらずに
済むと思ったのですが、SW_SHOWMAXIMIZED以外には無さそうですね。
>>618 二度やるのが多少気持ちが悪い程度なので、それで行きたいと思います。
cx = cy = 0の件は初耳で全く考慮してなかったので、気をつけます。
616さん、618さん、レスありがとうございました。
>>619 ValidateRectしてからSHOW_MAXMIZEDで誤魔化せない?
フルパスをあるディレクトリを基準とする相対パスに変換するAPI 逆に基準ディレクトリと相対パスからフルパスを生成するAPIはないでしょうか。 例えば、c:\aaa\bbb\ccc.txt(フルパス) と c:\aaa\ddd\(基準) から ..\bbb\ccc.txt(相対パス) とその逆の操作です。
_beginthreadで作成したスレッドの中で、LIBCMT.LIBやMSVCRT.LIBを リンクせずにCのランタイムライブラリを呼び出すのはNGでしょうか。
>>620 レスありがとうございます
試して、さらにすぐ隠したりしてみたのですが、やはり表示されちゃうみたいです。
>>622 > LIBCMT.LIBやMSVCRT.LIBを
> リンクせずにCのランタイムライブラリを呼び出すのは
どうやってやるんだ?
>>621 Shell APIでよければ
PathRelativePathTo()
PathCanonicalize()
とか?
他にもPath〜()調べてごらん
>624 え?普通に呼べましたよ。でもアウトプットウィンドウを見たら、 MSVCRT.LIBはロードされていました。
>>626 リンクせずにって書いたんじゃないのかよ。
で、結局リンクされてたら世話ないわ。
>627 すいません。「リンクせずに」と書いたのは、 プロジェクト→設定→リンク→オブジェクト/ライブラリモジュールに 明示的に指定せずに、ということでした。 「デフォルトライブラリを全て無視」のチェックは付けて なかったのでリンクされたんですかね。
>>627 普通にLIBC.LIBをリンクすりゃできるだろうが。
>>628 否定的な事ばかり言ってすいません。
しかしこのWS_MAXIMIZEがどうにも効かなくて困ったのがそもそもの始まりでした。
検索したところ、MDIの子ウィンドウにのみ意味があるという記述があって
早々に諦めてしまったのですが、なにか私が大ポカをやらかしている気もします。
WS_MAXIMIZEで普通に最大化起動できるよ?みたいなレスを頂ければ幸いです。
>>631 その後表示するときShowWindowに渡してるフラグは?
LIBCMT.LIBリンクしないと_beginthreadは使えないんではなかろか
>>632 なるほどー!そういう事でしたか。
WS_MAXIMIZEの時は、起動時の引数をそのまま渡していました。
WS_MAXIMIZEで作成すれば、ShowWindowの前にちゃんと、最大化されたWindowの情報拾えますね。
お恥ずかしい限りです。しかしすっかり諦めていた所なので本当に嬉しいです。
ありがとうございました。
>>625 ありがとう。それでいけそうdeath。
CPUのパフォーマンスカウンタの件、アドバイスありがとうございます。 諦めて消したコードを書き直してみたら、値を取得することができました。 いったい何が原因だったのか、わからずです。 QueryPerformanceCounterを呼ぶと1000クロックくらい経過してしまうので、 RDTSC命令を直接呼ぶことにしました。これだとオーバーヘッドは60クロックくらいで済みました。 お騒がせしてすみませんでした。
>633 すまん。出直してくる。
VC++でコンソールを扱うクラスを作ろうとしているのですが, コンソールのハンドラルーチンがうまくクラス化できなくて悩んでいます. SetConsoleCtrlHandlerでハンドラを設定するのですが, スタティックな関数しか指定できません. そこで,ウィンドウやスレッドのサブクラス化でやられるようにコンソールクラスの thisを隠しておいてジャンプさせようとしたのですが, SetConsoleHandlerの引数は関数のアドレスとハンドラを追加するか削除するかのブール値の二つ, HandlerRoutineに渡されるのは信号の種類を表すDWORD値一つだけで, このthisを隠しておく場所が見当たらないのです. 良い方法がありましたらお願いします.
>>638 サンクとか。
ATLのCWindowImplとか参考になるかも。
DATETIMEPICKERコントロールからのデータの取得は GetWindowTextで取得できたのですが、 データの設定がSetWindowTextで出来ません 何か固定のデータ形式か専用の別の設定する関数があるのでしょうか? テキストは"2004/12/15"という感じで設定しようとしたのですが、ダメでした
>>638 DWORD 値から、インスタンスのポインタとメンバ関数ポインタの組 or boost::function へのmapを
持てばいいんじゃない?
>>639 すばやいご返事ありがとうございます.
ちょっと調べてみたところ,
サンクはWOW系の16bitのアプリケーションを32bit環境で動かすためのAPIということで
今回の,自分の目的にあうものではないようです.
ATLは結構複雑なもののようですが,かなり参考になりそうなので見てみようと思います.
ザッと見た感じだと,thisをグローバルなマップに登録しておいてそこから引いてくるようなイメージでしょうか.
プログラムは殆ど初心者でして,
コンソールで動くゲーム(NetHackみたいなキャラクタベース)を作ろうとしているのですが,
それだけの事でも大変苦労してしまいます.
勉強の糸口を頂き,ありがとうございました.
>>641 DWORD値とメンバ関数へのポインタのマップもスタティックに持っておいて,
ハンドラルーチンの中からそれを呼ぶということですね.
これから書いてみますが,うまく行きそうです.
皆さん,ありがとうございました.
>>642 そういう意味のサンクではなかったのだが。
指定したthisでメンバ関数を呼ぶような関数を動的に作成するという感じ。
やりたいこと:特定のアプリが起動中か確認したい
環境:2003Server + MetaFrame VB.NET
他社のアプリケーションがサーバ上で起動中か確認したいんですが、 MetaFrameを使って
サーバのプロセスを取得すればいいと考えました。
1.Processクラスを使用する
→admin権限を持ったユーザしか取得が出来ない。MetaFrameを使用するユーザにAdmin権限は
持たせられない為×
2..psapi.dllでEnumProcessesを使用する
→VB6からの移行はOK。しかしカレントユーザのプロセスしか取得できない。
すべてのプロセスを取得しないと確認の意味がない。
3.Kernel.dllでCreateToolhelp32Snapshotを使用する
→VB6での確認は出来たが、.NETへの移行がうまく出来ない。
スナップショットの取得はできるが、次のProcess32Firstで必ず0が帰ってきてエラー。
3が実現しやすいのかと思っています。
サンプルは
http://vbvbvb.com/jp/gtips/1101/gCreateToolhelp32SnapshotTh32csSnapprocess.html を利用しています。
構造体は Public Structure PROCESSENTRY32 Public dwSize As Integer Public cntUsage As Integer Public th32ProcessID As Integer Public th32DefaultHeapID As Integer Public th32ModuleID As Integer Public cntThreads As Integer Public th32ParentProcessID As Integer Public pcPriClassBase As Integer Public dwFlags As Integer Public szExeFile() As Byte End Structure lngProcessSnapHandle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0) ReDim udtProcessEntry32.szExeFile(259) Dim i As Integer For i = 0 To 259 udtProcessEntry32.szExeFile(i) = 0 Next udtProcessEntry32.dwSize = Len(udtProcessEntry32) If Process32First(lngProcessSnapHandle, _ udtProcessEntry32) <> 0 Then 上のProcess32Firstで必ず0が帰ってきます。 長々と申し訳ありませんが、以上で状況はわかって頂けましたでしょうか? 助言をお願いします。
>>646 VB.NETの問題のような気がするが。マーシャリングの基本とか。
・PROCESSENTRY32のszExeFileはStringで宣言。
MarshalAsAttribute属性をつけて、UnmanagedType.ByValTStrとSizeConst=260を指定。
・dwSizeは、Marshal.SizeOf(udtProcessEntry32)で取得した値を設定する。
C#で同様にやった分には問題なかった。
647様、ありがとうございます。出来ました!! 出来たものの全く意味がわかりませんので、勉強してみます。 本当にありがとうございました。
誰か
>>640 もお願いします
ネット上でかなり調べましたが分かりませんでした・・・
DTM_SETSYSTEMTIME送れば?
ものすごく巨大な(1000万行×10フィールド)くらいの CSVファイルを特定のフィールドをキーにソートしろ と言われたら、普通どんな感じでやりますか?
>>651 俺なら数万行程度のブロックに分けてそれぞれをソートしてからマージソートだな。
特定のフィールドと行数のペアを作ってソート。
OracleかSQL鯖に食わせてSQL一発かけてCSV出力
>653 アホ
656 :
デフォルトの名無しさん :04/12/15 21:40:47
>>655 にんにく? いまバカの煮込みつくってます
どーゆー意味?
658 :
デフォルトの名無しさん :04/12/15 21:55:52
>>651 アルゴリズムを選びに行く前に、元データの傾向と対策をまず調べる
>652 やっぱそれですかね。何かいいサンプルとか転がってないですか?
Windowsのインデックスサービスの機能を呼び出すAPIって ありますか?
662 :
デフォルトの名無しさん :04/12/15 23:26:16
CreateEventってどういうときに使うの?
664 :
デフォルトの名無しさん :04/12/15 23:56:55
>>663 マルチスッドレのコードかいてて、スッドレ間の同期とるのに使う
>665 おー、面白そうだな、これ。
>664 どうもです。ボタンクリックとかメニュー選択とかのイベントとは 別物なんですね。
win2000にて。 GetAdaptersInfoを呼び出し取得したIP_ADAPTER_INFOの AdapterNameに対応したFriendlyNameを知るにはどうしたらよいのでしょうか? XPならGetAdaptersAddressesのIP_ADAPTER_ADDRESSESで一撃なのですが、 2000だとiphlpapi.dllにGetAdaptersAddressesが入っていないので・・・ ご存知のかたがいらっしゃいましたら、教えてください。
>>651 std::list<std::vector<std::string> > に格納して std::sort() が楽ちん。
std::sort()じゃなくて、listのメンバのsort() だった。 orz
>>670 潤沢なメモリをお持ちのようで。
#1億個のstring…
>671 >669みたいな何も考えてない奴ってかえって ほほえましいよなw
しかもstd::listのソートって激遅じゃん
VB6.0、Win2000で動かしているプログラムを VB4.0、Win95に置き換えないといけなくなってしまいました。 VB4.0、Win95での開発は経験がなく、 APIの本やネットで調べてみたのですが サブネットマスクとデフォルトゲートウェイとワークグループ名を取得する方法がわかりません。 ご存知の方がいらっしゃれば教えていただけませんでしょうか?
ある端末上で動作するWinサービス(SYSTEM権限で動作)で ワークグループ上のサーバの共有ディレクトリから端末の ローカルディレクトリにファイルをコピーしたいんだけど、 権限の問題で躓いています。ドメインは組んでいません。 サーバのディレクトリに対してアクセス権限があるユーザのIDとパスワードは あるのですが、端末のシステムにそのユーザを作成しないでやりたいです。 ユーザ/パスワードを暗号化してレジストリに置いて使うのはOKです。 【やってみたこと】 1.SYSTEM権限のままコピーしようとすると権限エラーで失敗します。 →サーバ側でNULLセッションとかいうのを許可にすればOK? 2.LogonUser→Impersonateだと、サーバの共有ディレクトリに アクセス権限のあるローカルユーザを作らないといけない。 ユーザを作らないとLOGON32_LOGON_NETWORKでしか成功せず、コピー不可でした。 ※LogonUserのネットワーク版みたいなの無いんでしょうか? 以上です。 動作予定環境はNT/2K/XPです。 宜しくお願いします。
>>674 VB4で開発しないといけない理由は?
Win95でもVB6は動いたと思うが。
#メーカー保証のないOSでの開発はできないと突っぱねるのが正解。
>677 ユーザーに納入しているマシンのうち、 現在その環境で動いているマシンがありまして、 新マシン(Win2000 VB6.0)で新たに追加したプログラムと 同じものを旧マシン(WIn95 VB4.0)でも追加しないといけなくなったのです。 >#メーカー保証のないOSでの開発はできないと突っぱねるのが正解。 個人的にはそうしたいくらいです・・・。
>>678 その場合、旧マシンのリプレイスを薦めるのが営業的にもいいかと。
つーか、VB6で開発したものをWin95で動かせばいいだけじゃないの?
#なんでVB4を使いたいのかが判らん。
680 :
デフォルトの名無しさん :04/12/16 22:21:21
無線LANを使用するアプリを作っているのですが、 ワイアレス接続の構成をアプリ側で制御することってできないんでしょうか? 環境はWindowsXPで、かつadmin権限で動かせます。 やりたいことは 「随時SSIDを検索して、条件にあったものと接続処理」 なのです。 Windows標準のワイヤレス構成が切れるし、 メルコのクライアントマネージャみたいなのもあるからできると思うのですが、 MSDNを漁ってもいまいち見つけ切れませんでした。 日本語、英語での情報とかポインタとか知ってましたら是非教えていただけないでしょうか。 よろしくお願いします。
>677 そういうことはお前には関係ないはずなんだが。
682 :
デフォルトの名無しさん :04/12/16 23:05:47
エディットボックス(エディットコントロール?)に たくさん文字列を入れたいのですがあんまりたくさんの文字列を入れると 表示されなくなってしまいます。 もっとたくさんの文字列を入れるにはどうしたらよいのでしょうか?
>>682 エディットボックスをあきらめてリッチテキストとかにする。
685 :
デフォルトの名無しさん :04/12/16 23:29:11
>>684 ありがとうございます。
やってみます。
686 :
デフォルトの名無しさん :04/12/16 23:30:28
たびたびすみません。 エディットボックスに値を入れて Enterキーを押すと値が反映されるようにしたいのですが Enterキーが降ってきません。 どうしたら取得できるのでしょうか?
>686 KeyPressに来ないの?
688 :
デフォルトの名無しさん :04/12/16 23:36:50
>>687 エディットボックスにフォーカスがあるときも
普通はくるものなのでしょうか?(私の組み方がまずいのかもしれないです。)
689 :
デフォルトの名無しさん :04/12/16 23:40:32
ちなみにメッセージはエディットボックスの 親ウィンドウで捕まえようとしています。 キルフォーカスなどのメッセージは取得できます。
>>689 Enter キーを押すことで、IDOK のボタンが押されたという
メッセージが来ているのかも。
>688 フォームのデフォルトボタンの方に行っちゃってるとか?
>>676 10Mレコードで10フィールドか。
1レコード512バイトとしても、5GB。
まぁメモリが足りたとしても、CPUが追いつかないでしょ。
>692 なんで?
ソートのアルゴリズムのオーダーの問題 クイックソートなんて使った日にゃ、O(n^2)で死ぬよ。 1kレコードならO(n^2)でも1Mの計算量で済むが、 10Mレコードだと 100Tの計算量になっちゃうんだよ。
クイックソートは事実上n・log(n)じゃないの?
>>692 つまりWin「32」APIのスレである以上オンメモリのソートなんてありえない解決策ってことか
あのー、分割してマージソートって結論はとっくに 出てるんですが・・・ メモリなんかでやるわけねーだろ。
ちょっと質問 ホイールの入力状態を取得するAPIってやっぱり無いんでしょうか? GetAsyncKeyStateのような使い方で簡単に取得出来ないかなと思いまして。 メッセージで取得するしか方法は無いのでしょうか? 宜しくお願いします。
699 :
デフォルトの名無しさん :04/12/17 10:46:15
,,,,,,,,,,,,,,,,,,,, /": : : : : : : : \ /-─-,,,_: : : : : : : : :\ / '''-,,,: : : : : : : :i /、 /: : : : : : : : i ________ r-、 ,,,,,,,,,,、 /: : : : : : : : : :i / L_, , 、 \: : : : : : : : :i / メッセージで取得したら /●) (●> |: :__,=-、: / < 負けかなと思ってる l イ '- |:/ tbノノ \ l ,`-=-'\ `l ι';/ \ ニート(24・男性) ヽトェ-ェェ-:) -r'  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ヾ=-' / / ____ヽ::::... / ::::| / ̄ ::::::::::::::l `──'''' :::|
マウスホイールの仕様を考えればおのずと分かるような気がするが・・・
仕様なんてシラネーヨ
分からないので教えていただきたいのですが・・・(^^; VBの実行ファイルからVC++で作成したDLLの関数を実行すると例外エラーで落ちてしまいます。 落ちる箇所が決まっており、DLLから文字列をVBの実行ファイルへ送った直後に必ず発生します。 VBはフォームのロードイベントで関数をCALLしています。 【グローバル変数の宣言↓】 LPSTRg_datasendp = NULL;// VBデータ引継ぎ用バッファポインタ 【グローバルメモリ領域の確保↓】 g_hMem = GlobalAlloc(GMEM_FIXED | GMEM_ZEROINIT, sizeof(SEI_INF_TBL)+256); if (g_hMem == NULL) {// メモリー不足 MessageBox(g_hWnd, ERR_MALLOC, MSG_BOX_CAP2, MB_OK | MB_ICONERROR); return-1; } g_datasendp = (char*)g_hMem; 【VBへ渡す文字列をセットする関数↓】 FARM_API LPSTR __stdcall GetSeiData(SHORT i_type) { switch(i_type) { case TYPE_SEINAME: // 名設定 strcpy(g_datasendp, g_sei_inf_tblp->sei_name); break; ・ } return g_datasendp; } DLLの宣言が間違っているのでしょうか? 分かる方、是非教えていただけないでしょうか? よろしくお願いします。
>>702 もしかしてVB側で戻り値の型がStringになっている?
>>703 はい。返却値はString宣言しています。
Public Declare Function GetSeiData Lib "Farm.dll" ( _
ByVal i_type As Integer) As String ' 生産者情報取得処理
VBのデバッカでは動作してしまうのです・・・。 (DLL・EXE共最新です)
BSTR
>>704 確かこうすればいいはず。g_datasendpは要らなくなる。
FARM_API BSTR __stdcall GetSeiData(SHORT i_type)
{
char *p;
switch(i_type)
{
case TYPE_SEINAME: // 名設定
p = g_sei_inf_tblp->sei_name;
・
}
return SysAllocStringByteLen(p, strlen(p));
}
VBの文字列は長さ(32bit)と文字列の格納されたUnicodeの配列で、 BSTRはunicode配列のアドレス。 VBのデバッガで動作するのは、デバッガが終端のNULLを見ているか、 たまたまと思われ。
>>707 回答ありがとうございます!!
早速試してみます!!
どうもでした。
結果はまた書き込みます。
>>708 VBの文字列 == BSTR
文字列の長さを持っているのがBSTRの条件だよ。
>>707-708 本当にありがとうございました!!
動きました!!
助かりました!!
これで作業を進める事が出来ます。
若輩者ではありますが、今後もよろしくお願いします。
>>710 うん。わかってる。んなもんで、
>>706 を書いた。
(そんときは時間がなかったので、一言だけ書いたけど)
BSTRなのにstrlenでいいのけ?
714 :
デフォルトの名無しさん :04/12/17 15:22:42
return A2BSTR(p); でもよかったとおもうべな。
>>713 VBはDLL関数に文字列を渡したり返したりするときに勝手にShift JISとUnicode間の変換をしてくれるから平気。
>>713 だめだよね。
全角文字ばかりだからたまたま動いている、と想像する。
(^( さすがVB )^)
719 :
デフォルトの名無しさん :04/12/17 18:24:20
すみませんDLLにバージョン情報付けたいのですが DLLリソースつかえませんよね? どうすれば・・・ おねがいします
ごめん・ほうとうにごめん ちょっと子一時間説教されてきます なぜかリソース使えないつもりでした
722 :
デフォルトの名無しさん :04/12/17 18:35:50
APIの質問じゃないと思うんですけど コモンダイアログのGetOpenFileNameを呼び出すと 画面の左上にウインドウが表示されてしまいます・・ これを画面中央に表示させたいのですが OPENFILENAMEに何か値を入れると直るのでしょうか? 環境はVC7でMFCは使ってません
hwndOwnerにハンドルをセットするとそのウィンドウの左上あたりに表示されるみたい
725 :
デフォルトの名無しさん :04/12/17 20:44:47
エディットコントロールのフォントを変えたのですが、カーソルの大きさがそのままで変わりません。 デフォルトの文字サイズより小さくしたのですが、エディットコントロールの高さも変わりません。 高さが変わらないのはカーソルのせいではないかと思うんですけど・・・。 解決方法をお願いします。 エディットコントロールのフォント変更は、WM_CTLCOLOREDITが来たときに wParamからhdcを取得して、あらかじめ用意しておいてフォントをSelectObjectで選択しています。
サブクラス化してみたらどう?
>>726 ありがとうございます。
やってみます。
WM_SETFONT
>>728 おっと、
ありがとうございます。
調べてみます。
WM_SETFONTでできました。 ありがとうございました。
731 :
デフォルトの名無しさん :04/12/18 12:48:51
リストボックスの選択されている項目の文字列を取得するにはどうしたらいいのでしょうか?
MSDN眺めれば5分とかからずわかりそうな事を・・・
733 :
デフォルトの名無しさん :04/12/18 13:04:09
OSだけ再起動したいのですが、どうしたらよいでしょうか (昔のOSでSHIFT押しながら再起動をしたときのように)?
>>732 MSDNは異常に重いうえに分かりにくいのですが・・・。
一応見てみます。
736 :
731 :04/12/18 13:32:02
すいません、やっぱりMSDNではちょっと無理があります。 どこを調べていいのか分からない上に、検索文字列に日本語を使えないのは厳しいです。 もうちょっとまともなサイトを紹介していただけませんでしょうか?
738 :
デフォルトの名無しさん :04/12/18 13:41:24
>>737 リストボックスです。
>>738 ありがとうございます!
LB_GETTEXTでできました!
740 :
デフォルトの名無しさん :04/12/18 16:07:15
リッチエディットに画像を表示する方法はありますか? Wordのように、改行されると画像も下に移動するようにしたいのです。 Borland C++ Compilerを使用しています。
MFCとSDKって出来る事が違うのですか? 今はSDKしか勉強していないのですが、MFCも扱えた方がいいですか?
>>743 そうなのか?
俺はそういうのをどこかのサイトで読んでから、それを信じてたがw
適材適所 MFCや他のライブラリを使えば短時間で簡単に仕上げられる仕事を SDKレベルで車輪の再開発している同じフロアのやつを見ると腹が立つ。 もちろんMFCが想定しないようなアプリケーションスタイルとか、細かい ケアが必要なものはSDKレベルでやったほうが良い場合も多い。
746 :
デフォルトの名無しさん :04/12/18 21:40:05
>>742 CRectTrackerなんぞ自分で作るのか?
細かいケアが必要なものも最近じゃATL/WTLで作ってるな、俺は。 一度楽するとSDKで作る気起きん。
ライブラリの限界にぶちあたるとそれを回避する方法を考えたり 最悪パッチ作ったりと大変だけど、基本的には圧倒的にライブラリ 使ったほうが生産的だよな
他人のソース見たりしないんだろうか? MFCも知らないと損だろ
>>749 MFCは使ったことないけどMSDN見れば(特にAPIのラッパ部分は)大体理解できるから問題ない。
MFCを知らずにソースだけ追いかけても理解できないはずだけど
VC++についてるウィザードが使える、というだけでもMFCを使う価値はあると思う。 ただ、MFCが優れているかというと、うーん・・・ VBのC++版っていう感じがして、なんかダサいな。 Win32直叩きでも作ったことあるけど面倒だったのでMFC使ってます。
VCTK+WTLがなんか好きだな。タダだし
>>753 WTLってATL必須じゃないの?
んでATLは有料と。
英語が苦手な人は、bccが良いかと。 コンパイラとしての性能は比較にならんほどvctkだけど。
VCって1万円くらいでしょ? なんでVCtoolkitに手を出すの?
学生はいいよな
MSはボリすぎ
コンパイラで数万円ならそんなもんじゃね? bccとかみたいに放置状態ならフリーでもいいかも。
MFCは基本的にはなんにもしてくれないだろ。 アレ使って、なんか楽になるのか?
使いづらいSDKのラッパーという印象しかない。
>762 君はそれでいいんじゃないの?
765 :
デフォルトの名無しさん :04/12/19 07:37:30
APIをフックすることは可能ですか? なにかのAPIをコールしたときに自分の関数を呼ばせ、 そこで処理をしてから本物にバトンタッチするようなことを考えてるんですが。
>>758 ごめん。
VS.NET 2002が出て、VC6が安売りされてる時の値段だった。
>765 できる。
>764 あなたの経験年数は?ちなみにわたしは1年。
>665 面白い本を紹介してくださってありがとうございます。 さっそく注文して届いた本をぱらぱらめくって見ているのですが、 年末年始はこの本にどっぷりつかりそうです。
>>768 Win32APIなら7年
MFCなら5年
>>770 (`Д´ )9m経歴詐称で訴えてやる!!
俺なんか Win32API:1年 MFC:2年 まだまだだな・・
>>772 経験年数なんて自慢するもんじゃない。
どんなに年月かけたって進歩の無い奴は無いまま。
3年もたって使いこなせないのはもう駄目だと思う。
一年あれば充分だろ。
半年あれば十分だろ
一久遠あれば十分だろ。
(・∀・)ニヤニヤ
エディットコントロールにスクロールバーが付いている時、 WM_MOUSEWHEEL を、そのスクロールバーに感知させないようにするには どうしたらいいのでしょうか? プロシージャのサブクラス化をしているつもりなのですが、 まず最初にスクロールバーが感知して、それから、 サブクラス化したプロシージャに来ているようなのです… WM_MOUSEWHEEL を、自分だけでイベントハンドリングしたいのです スクロールバーがあっても、感知させたくないのです
>>774 1年じゃ無理では無いにしろ難しいと思うな。
結構くる注文で
「flashやVCみたいなのにしてくれ(ドッキングツールバーのことだな)」とか
「IEのお気に入りと同じような機能を入れてくれ」
ってのがあるけどあーゆーのはホイホイ作れるまでなるのは時間かかるだろ。
まあ、Win32APIだけの話ではね。
ライブラリ使えば数分でできる仕事を Win32APIだけで時間をかけて作る意味があるのか? しかも一年以上の修行期間が必要だなんて・・・
技術屋の自慰行為
C++知らなきゃしょうがない。 手も足もだせないだろう。
>>780 そういうライブラリの存在を知る時間も含めて
一年でできるようになるのかと。
モノによるのでは。 数を売るパッケージで、頻繁に使うようなものならSDKで作りこむのもよい。。 短納期で開発効率重視ならライブラリに頼って少しでも工数が稼げれば。
短納期で開発効率重視であることの方が多いよなぁ・・・
ahoか? 分かってたら答えてるわ
Delスレで質問したら、こちらにとレスがあったので、質問させてください。 ドライブ名(Cとか)からハードウェア名を取得するには、どのように したらよいのでしょうか? ドライブを右クリックして、プロパティを開き、ハードウェアタブに 表示されるハードウェア名を取得したいのですが。
>792 仮にそうだとして何か問題でも?
795 :
デフォルトの名無しさん :04/12/19 23:33:35
もしかして、C++ が使えるんだと言う自慢なの ? (藁
どれが?
エディットコントロールを作成した時点でキャレットを表示したいのですがどうすればいいか教えてください。 キャレット作成して表示してもそのキャレットは移動できません。 なのでエディットコントロールをマウスでクリックしたときに初めて表示されるキャレットを最初から表示したいのです。お願いします
>>799 ありがとうございますありがとうございますありがとうございます
下のようなプログラムを書いたのですがウインドウが、一番手前に来ません。 SetForegroundWindow( hWnd )ではうまくいったのですが・・・、 どうしてだか気になるので教えてください。 if( GetForegroundWindow() != hWnd ){ SetWindowPos( hWnd , HWND_TOP , 0 , 0 , 0 , 0 , SWP_NOSIZE | SWP_NOMOVE ); }
>>791 ハードウェアタブに表示されるのは全ドライブの一覧で、
ドライブレターとの関連はないよ。たまたま一番上に表示されてフォーカスが合ってるだけだったりする。
ドライブのメーカーや型番を取得するのは、
"\\\\.\\c:"をCreateFileで開いて、
DeviceIoControl()でIOCTL_STORAGE_QUERY_PROPERTYでSTORAGE_DEVICE_DESCRIPTORを取得すればいけそうな希ガス。
サンプルやヘッダはDDKにあります。
ごめん、ヘッダはDDKにあるけど、参考になるサンプルはないみたい。 たまたま自分がやろうとしていたことに近いものだけ、サンプルがあったので、他のもあると思い込んでました。
たとえば、こんな感じ。 元々SCSI用なので、ATAの場合はベンダ名がプロダクト名に入ってきます。 ・・・だけど、ダイナミックディスクでは取得できない・・・もっと適切なAPIがあるのだと思います。 #include <devioctl.h> #include <ntdddisk.h> HANDLE hFileHandle = CreateFile("\\\\.\\c:", GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL) ; if (INVALID_HANDLE_VALUE != hFileHandle) { UCHAR buffer[2048] ; ULONG returned = 0 ; STORAGE_PROPERTY_QUERY spq ; spq.PropertyId = StorageDeviceProperty ; spq.QueryType= PropertyStandardQuery ; BOOL status = DeviceIoControl(hFileHandle, IOCTL_STORAGE_QUERY_PROPERTY, &spq, sizeof(spq), buffer, sizeof(buffer), &returned, 0) ; if (status) { STORAGE_DEVICE_DESCRIPTOR* pSDD = (STORAGE_DEVICE_DESCRIPTOR*)buffer; char* psz0 = pSDD->VendorIdOffset? &((char*)pSDD)[pSDD->VendorIdOffset] : NULL ; char* psz1 = pSDD->ProductIdOffset ? &((char*)pSDD)[pSDD->ProductIdOffset] : NULL ; char* psz2 = pSDD->ProductRevisionOffset ? &((char*)pSDD)[pSDD->ProductRevisionOffset] : NULL ; char* psz3 = pSDD->SerialNumberOffset ? &((char*)pSDD)[pSDD->SerialNumberOffset] : NULL ; } }
>>750 LoadImage でLR_LOADMAP3DCOLORSを指定しても正しく色変換がなされないケースへの
workaround とか、MFCにもいろいろ役にたつコードが含まれてるわけで、一通りソース読んで
おくくらいのことはした方がいいと思うけど・・・
スレをまとめてFAQ作るような勤勉な輩はいないものか。
マウスカーソルが自分のウインドウ上から出た瞬間は どうやって検出すればいいですか
キャプチャして移動するたびに座標比較する
812 :
デフォルトの名無しさん :04/12/20 19:21:35
TCP/IPのIPアドレスなどのネットワーク設定(LAN設定)の切り替え(切り換え) をワンタッチで簡単にできるTCP/IP設定変更ツールを作りたいのですが どんなAPIを使えばよろしいでしょうか? 環境はWindows2000,XPを考えています
>813 リンクありがとうございます。
815 :
デフォルトの名無しさん :04/12/20 20:07:37
音楽を再生するMMControlについて質問です。 MIDIデータを再生し、一時停止(Pause)した後、再びその位置から再生すると、何故か音色が変わってしまいます。 使った事のある方なら殆どの方がきっと「あれ?」と思うところだと思います。 どうもMMControlでは、頭から再生しようとした場合しか音色設定を読み込んでない気がするのですが、 何か解決方法は無いでしょうか。
すいません、MMControl、つまりマルチメディアMCIコントロールでのMIDI再生の事です。
817 :
デフォルトの名無しさん :04/12/20 20:16:43
ネットワークドライブの共有元フォルダ名から共有名を知る方法はありませんか? コンピュータ名:SERVER 共有フォルダ:E:\Data だと共有元フォルダ名は"Server:e:\Data"になりますよね? それを別なコンピュータ上でXドライブとして設定してたとすると、 "Server:e:\Data\Tmp"を"X:\Tmp"にへんかんしたいのですが。 環境:windows2000 よろしくお願いします。
WNetGetConnectionで一致する物を探す
>770 7年もコーディングやってるなんて化石みたいな奴だな。 一生次のステップに進めなそう。
821 :
817 :04/12/20 23:25:31
>>818 さんありがとうございます。
試してみたのですが、
期待する文字列"Server:e:\Data\Tmp"にたいして
"Server:\Data\Tmp"しか取得できませんでした。
参照先の完全なローカルパスが取得したいのですが無理でしょうか?
>>821 参照先のドライブ名は得られないと思うけど。
AddIpaddressで仮想的にIPを追加できることはわかりました できればローカルエリア接続のプロパティで設定したのと同じ設定 (再起動しても設定が消えない)方法でやりたいのですが 調べたところネットワークドライバ(NDIS?)でプログラムすることに なるのでしょうか? と、いってもデバイスドライバのプログラムなんて想像がつかない状態です
824 :
デフォルトの名無しさん :04/12/20 23:46:57
何この過ぎ去ったレスほじくりかえしてるスレ
>>820 専門学校で3年、会社で4年だけど?
まともなWindowsのアプリ組める奴ってめずらしいだろ?
絵に描いたような胃の中の蛙でちゅね。
VC++ Version2003ってClassWizardってないのか? VC++6だと、メニュー→表示→ClassWizardってな感じでいけたけども。
>>826 自分がまともなものを組めないからって、そんなことを言っちゃいけないよ。
まとも、というのがどの程度のレベルかだね。 一見まともそうでも、画面のデザインやDPIを変更すると破綻するアプリは多いよ。
うえみてくらすなしたみてくらせ
>>832 作ってる本人と環境が違うと問題がでるのはどうしようもないだろ
本当におかしければユーザーから指摘されて直すだろうし
もしかして色盲とか弱視とかで非常に特殊な設定してる人ですか?
>824 あわれよのう
>>834 どうしょもなくないよ。まともに作ってれば問題は起きない。
たまたま自分の環境でうまく動いてるだけというのは、まともとは言わない。
決め打ちでC:\WINNT\SYSTEM32にインストールしたり、
一時ファイルのために C:\ランダムな数字 なフォルダを作ったりするアプリを、まともと言いますか?
>>832 > DPIを変更すると破綻
それってディスプレイドライバの問題じゃん。
まあ、なんでもいいけど。 数年来Win32の経験つんできているってことは需要がありつづけるってことでしょ。 ええなあ。
840 :
デフォルトの名無しさん :04/12/21 12:08:18
Windowsのファイルシステムにファイル(やディレクトリ) を一意に識別する固有の 識別子のようなものはないですか? あればそれを取得や検索するAPIも教えていただけませんか?
>>840 パス名とファイル名を繋げると一意な識別子になります!
Σ(゚Д゚;)ハッ
843 :
840 :04/12/21 12:35:55
>>841 一度作成されたら削除されるまでリネームしようが移動しようが変わらないものは
ないのですか?
無いよ
Σ(゚Д゚;)ハッ
実行した瞬間MS-DOSを起動させるには、どのようにすればいいですか?
洗ってきました。さぁ、教えてください。
NT系だとMS-DOSは入ってないよな
Σ(゚Д゚;)ハッ
>>843 msvcrt の struct stat の st_dev と st_ino はどういう意味の値なんだろうね?
UNIX だとこの2つの値のペアを(パス名非依存の)識別子と考えられるんだけど。
LoadLibrayExで LOAD_LIBRARY_AS_DATAFILEを指定してDLLを読み込んだとき その読み込んだDLLをそのまま別のファイルに書き出すにはどうすればよいのでしょうか。
>>852 LoadLibrayExで指定したファイル名を使ってCopyFile
>>851 ありがとうございます、さっそく調べてみたのですがMSDNライブラリには
>st_ino は、FAT、HPFS、または NTFS の各ファイル システムでは意味を持ちません。
との記述が…
残念です。もう少し調べてみたいと思います。
>>854 ありゃ、残念。
で、Cygwin で st_ino がどうなっているか調べてみると、
GetFileInformationByHandle() を使っていて、この API で得られる
nFileIndexHigh と nFileIndexLow がそれっぽいような違うような値ら
しい。
| Note that this value is useful only while the file is open by at least one process. | If no processes have it open, the index may change the next time the file is opened. 違うよなあ、こりゃ。
OS上ではどのように処理しているのですかね? まさか、リネームや移動しているたびに変更情報は作りませんよね? フォルダの移動なんかやったらえらいことになりそう… ファイルシステムに詳しい方はいませんか? スレ違いですかね?
>>840 だから無いからOSは何も処理してないよ。
>>838 そういう話ではない。
画面レイアウトがピクセル単位で決められているのにフォントだけポイ
ント単位で作成してたり、メニューのフォントが大きくなってメニュー
バーが2段表示になるとクライアント領域が狭くなって一部の操作がで
きなくなる、とかのアプリケーション。
MD5
オブジェクト識別子ってのがなかったっけ? Distributed Link Tracking Serverが使ってる奴
>>840 GetFileInformationByHandle
ただし、誰かが握ってないとダメ。
>850,843 ない >857 >リネームや移動しているたびに変更情報は作りませんよね? >フォルダの移動なんかやったらえらいことになりそう… なにが大変なのかわからんけど FATの場合、リネームや移動ではFATエントリーは変化しない(当然データの移動も発生しない) 単にディレクトリエントリの中身が書き換えられるだけだからそれほど大変じゃない ただ、ディレクトリエントリのどこに書き込まれるかは移動するたびに変わる コピーすると実際にデータが入るクラスタが変わるのでFATエントリーも変化
プログラムでマウスの自動処理をしたいのですが、SendMessageで 特定のハンドルに送るのではなく、画面のx,yをクリックした事にする事は 出来ますでしょうか? 全ての窓を取得してx,yの位置の最前面にあるハンドルに送ったりするの ではなく、マウス操作をそのまま再現する様な・・・
>>865 使ったこと無いけどmouse_event
ところでなんでこのAPIは小文字なんだろうな
>>866 クスコ
絶対座標の仕様が回りくどい・・・
>>864 そうですか、説明ありがとうございます。元々やりたかったことが特定フォルダをReadDirectoryChangesw
で監視して、ファイルの情報をデータベース二キロ浮くしたかったのです。
そこでファイル固有の情報を主キーにしようかなと思っていたもので。
実際に作ってみたのですが(とりあえずフルパスを主キーにした)、このAPIって結構ターゲットの変更を追
尾しきれないのですね。私の作り方が悪いのでしょうが。
メインスレッドから監視スレッドを立ち上げ、変更がある都度書き込みスレッドを作成してデータベースに
アクセスしています。ファイルの追加やリネームニューでデータを追加し、削除やリネームオールドでデー
タを削除しているのですが、瞬間的に作られるテンプファイルなどが新規ファイルとして残ったり、多くの
ファイルを同時に操作すると削除したファイルなどがデータベースに残ってしまいます。
基本的なアプローチが間違っているかともおもいますが。このよう場合の常套手段など在るのでしょうか?
他スレ誘導や参考サイトなど教えていただけると助かります。
>変更がある都度書き込みスレッドを作成して 変更が立て続けに起きたときに処理が並行して正常に記録できなくなってる悪寒。
>>863 レスしなくてすみません。まだ未解決です。
APIには慣れていないもので、色々と調べています。
今回、ハードウェア名(?)を調べたいのは、USB接続された
リムーバブルディスクですが、質問ばかりだとアレなので、
まず
>>804 の内容を理解しようと頑張ってみます。
参考になるサイトがありましたら教えて頂けると助かります。
>>865 vncサーバのソースとか読んでみたらどうでしょう。
vncプロトコルは異様にシンプルなので、特に問題なければサーバを
そのまま使うのも簡便でしょう。
名前見てるだけでチンチン立ってくるよ。
873 :
デフォルトの名無しさん :04/12/22 16:44:40
システム警告音を鳴らしたまま MessageBox を表示して それを閉じるまで Beep 鳴りっ放し、ってのは出来ないでしょうか? (サウンドカードは使えないとして)
別スレッドで鳴らしまくれ!!! でもそれ激しくウザいな
でもそういう要求は多い罠。 でも納品してからやっぱり五月蝿いと言われる罠。
んで、ボリュームを下げるよう言われるのな。
やはり別スレッドになりますか… 取り敢えず別スレッドの無限ループ内で Beep() を呼ぶ、というやり方で試してみました。 …継続時間として指定した時間が経過するまでは TerminateThread でもすぐに止まらないっすね。 継続時間1秒として、「音が止まるまで少し遅れる事がある」 というところで納得してもらうことにします。 ありがとうございました。
すいません InvalidateRectで全画面描画すると 凄いチカチカするんですが どうにかできないでしょうか? 以前使ってた言語ではこの程度でチカチカはしなかったんですが
そうですか
WM_ERASEBKGNDを適切に処理する。
やはりもう少し勉強してから質問する事にします 失礼しました
>>870 USBのHDDでも大丈夫でしたよ。
HDDがUSBかどうかは、STORAGE_DEVICE_DESCRIPTORのBusTypeでわかります。
"\\\\.\\c:" というのはCドライブの場合で、Dドライブなら "\\\\.\\d:" です。
あと、C言語では\を直接書くことができないので、\を\\で書いています。
つまり、CreateFileに渡すのは実際には、"\\.\c:"です。
\ではまってたら、ごめんなさいね・・・。
Win2000より古いWindowsで、HWND_MESSAGEを使ったメッセージ専用ウィンドウと 同等の機能を実現することって可能ですか?
識別できるようなクラス名もウィンドウ名も持たないダイアログがあるのですが こういったダイアログのハンドルをFindWindowで取得するにはどうすればいいのでしょうか?
何が異なるのかをとりあえず書け
887 :
デフォルトの名無しさん :04/12/23 01:03:56
c++スレでスレ違いといわれたのでこちらであっているのか分かりませんが。。 VC++.net キーボードとマウスからの入力はWM_KEYDOWNなどを受け取るので分かりますが、 ゲームのコントローラーからの情報はどうやれば分かるのでしょうか。 spy++でやってもコントローラーからの情報は一切受け付けません(出力を全て選択していますが該当するものは元々なさそう)。 コントロールパネルのゲームコントローラーは正常に受け付けています。 ゲームのコントローラーは[PS2のコントローラー]-[コンバーター(USB接続)]-[PC]と繋いでいます。
大きなファイル(数GB)の真ん中に、数Byteのデータを挿入したいんです。 真ん中にシークして、書き込む領域のデータをバッファに待避して、 書き込みたいデータを書き込み、次々とずらして最後まで繰り返していく、 という方法でできるにはできますが、 ファイルが大きいので入出力処理に時間がかかってしまいます。 できるだけディスクへの入出力が少なくなるようにするには、 どうするのがいいのでしょうか?
>>891 どうしようもない。データ構造を工夫するとか。
たとえばビデオデータの例だとQuickTime なんかは、実際のファイル内での順序と
再生される時系列とが一致しなくても良いデータ構造を使って、編集時はファイルを
大きく変更しなくても挿入やカットができるようにしている。必要なら最後に整列する。
>>892 ,893
すでに作られているファイルを加工したいので、
自分でデータ構造を定義できないし、データベースも使えないんです。
メモリマップトファイルを使って…、とも考えたんですが、
結局、書き込みが発生してしまうんですよね。
ファイルシステムを直接いじるってのはどうだ? 断片化するだろうけど‥‥
>>887 RegisterRawInputDevicesを呼び出すとWM_INPUTを受け取れるようになる。
普通はDirectInputだろうけど。
>>896 レスありがとうございます。
DirectInputを検索して出てきたサイト(ToruのDirectX〜)のジョイスティック状態のサンプルを実行してみました(PS2のコントローラー)。
(
ttp://www.geocities.jp/toru_website/di/4.html )
左側のスティックを傾けない場合、十字キーの[左か右]と[上か下]を常時押した状態になります。
また倒した方向に対した十字キーの押下は正しいのですが、傾けた角度は関係なく言わば押したか押していないかの判断しかしていません。
dijsに状態を取得し、dijs.lXで十字キーの左右の状態をあらわしていますが、ジョイスティックの場合は違うのでしょうか?
(文章を書くのが下手ですみません)
898 :
デフォルトの名無しさん :04/12/23 15:59:24
ジョイスティックをキャリブレートして確かめた後にDirectXのヘルプを ダウンロードして読んで、それでもわからないならDirectXスレに行って質問してください
あげちた。スマソ
了解です
>>883 CreateFileはネット上にサンプルもあったので、なんとか
できました。
今、DeviceIoControlについて調べています。
こちらは、Delphiでのサンプルがネット上にも少ないので、
苦戦していますが、がんばってみます。
質問なのですが OSはXP Visual.net C++ を使用しています マルチメディアタイマーを使用するときは プロジェクトにwinmm.libを参加させます と書いてあるのですが これはどのようにやればいいのでしょうか? 教えて下さい
903 :
デフォルトの名無しさん :04/12/23 17:40:01
>>902 ソリューションビューからプロジェクトアイコンを右クリックし [プロパティ]
[構成プロパティ] - [リンカ] - [入力] - [追加の依存ファイル] に winmm.lib
質問なのですが >プロジェクトにwinmm.libを参加させます などという莫迦な言い回しは どこに記述されているのでしょうか? 笑いたいので教えて下さい
>>902 #pragma comment(lib, "winmm.lib")
907 :
デフォルトの名無しさん :04/12/24 00:20:19
WM_KEYDOWNでVK_TABやVK_LEFTのときに SHIFTもいっしょにおされていたかどうか 調べるにはどうするんでしょうか
GetKeyStateなど
909 :
デフォルトの名無しさん :04/12/24 00:35:21
おばかな質問でごめんなさい。 用語をあまり知らないので、ググり方もよく分かりません。 やろうとしていることが、もしかしたらAPIというものを使えば出来るかもしれない ということを知るまでに、かなりの時間を費やしたのアホです。 使えるのはAccessVBAのみ 最小化されてタスクバーにおさまっちゃった状態のアプリケーションを、 表舞台に引っ張り出す方法を教えてください
Alt とTabを押す
912 :
デフォルトの名無しさん :04/12/24 00:55:06
>>910 すみません
ググルための語彙力の限界というか・・・
アプリケーション アクティブ化 API とかでググッたら、それっぽい自作関数が紹介されてたんですけど、
これが使えるのは、最前面にあるAccessのすぐ真裏でひそかに生きてる状態だけでした。
(こんな言い方で分かっていただけますか)
最小化されてタスクバーにおさまっちゃった状態では通用しなかったんです。
>>911 sendkeys "%{Tab}"
でもどうにかいけることはいけるんですけど、
できれば、タスクバーにおさまっているものの中からアプリケーションを指定して、引っぱり出したいな
と。(いくつもあると、何が出てくるか分からないので)
Alt とTabを押す
ゴメン。。。
順を追って読め
XPの「アクティブでないインジケータを隠す」の個別アイコン設定を 変更&適用する方法、どなたかご存じでしょうか。 どうしても設定が保存されないアイコン(サービス類)を、スタートアップ で変更&適用出来たらなと思っているのですが・・・
>>917 ここらへん。詳しいことは知らない
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\TrayNotify
DOS用プログラムをコマンドプロンプトを表示しないで 実行しつつ、そのプログラムの吐いた標準出力の結果を 得るにはどうしたら良いのでしょうか?
>>905 「させます」取ってみた。あぁ、噂の「猫」か。
HTML も酷ぇなw
>>919 if (CreatePipe(&hRead, &hWrite, &sa, 0)) {
if (DuplicateHandle(GetCurrentProcess(), hWrite, GetCurrentProcess(), NULL, 0, FALSE, DUPLICATE_SAME_ACCESS)) {
PROCESS_INFORMATION pi;
STARTUPINFO si = {sizeof si};
HANDLE hOutputOld = GetStdHandle(STD_OUTPUT_HANDLE);
SetStdHandle(STD_OUTPUT_HANDLE, hWrite);
if (CreateProcess(NULL, pszCmdLine, NULL, NULL, TRUE, DETACHED_PROCESS | NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &pi)) {
CloseHandle(pi.hThread);
WaitForSingleObject(pi.hProcess, INFINITE);
CloseHandle(pi.hProcess);
SetStdHandle(STD_OUTPUT_HANDLE, hOutputOld);
// ここでReadFile(hRead, ...);
}
}
CloseHandle(hWrite);
CloseHandle(hRead);
}
HANDLE hReadm hWrite;の1行を書き忘れた。書き足しておけ。
命令するな!
>>923 (°Д°)ハァ?
お前はコマンドプロンプトを絶対に使わないんだな!!
>>921 なるほど、パイプですか。
パイプは使った事無かったので盲点でした。
ソースまで書いて貰いありがとうございました。
自分のスレッドのIDを後から知りたいのですが、 よろしければ取得APIを教えて頂けないでしょうか。
GetCurrentThreadId
検索ワードを変えたらあっさりヒット、失礼しました GetWindowThreadProcessId
>>927 重ね重ねすいません、そっちの方が良さそうですね
ありがとうございました
930 :
デフォルトの名無しさん :04/12/25 03:31:08
spawn しまくってる香具師はパイプカットしろ
932 :
デフォルトの名無しさん :04/12/25 10:17:27
BST_CHECKEDのBSTは何の略?
ボケ死ねタコ
>>931 参考サイトだけ見せられても…
実際のコードは?
935 :
932 :04/12/25 10:32:26
自己れす、ボタンステートですた。
934> 今はまだ設計開始中のため考慮している段階です。 ファイルの書込み更新時点でファイルをリードして内部 処理するのが目的なのですが、何か良い方法はあるので しょうか?
>>936 単に不具合なんじゃないかって、話しだと思われ
>>936 喪前がうまくいかないってコードを見せればいいんだよ。
取りあえずどういうタイミングで通知が来るのか、 書き込んだりフラッシュしたりちょっと待ってみたりしてしっかりチェックしてみな。
940 :
デフォルトの名無しさん :04/12/25 13:16:29
プロセスごとに使用するネットワークのバンド幅を制限したいのですが、 このようなことは Win API で可能でしょうか?
プロセスごとに制御できるかどうかはしらんが QoSで調べてみれば
>>940 Windows2000以降ならできると思う。
NEGiESとか、フリーウェアでやってるので、マイクロソフトとNDA結ばなきゃ使えないAPIなんてことはなさそう。
>マイクロソフトとNDA結ばなきゃ使えないAPI そんなものはありません。
あります
>944 表向きだけな。
表向きってどういうこと?
>946 いや、むしろ 表向きってどういうこと?ってどういうこと? って聞き返したいんだけど。
って聞き返したいってどういうこと?
>>944 表向きでもいいんだけど、例えばどんなやつ?
OTLSとか。
BITMAPV4HEADER / BITMAPV5HEADER の後ろのほうのメンバの使い道を教えてください。 LOGCOLORSPACE 構造体によく似ているので関係あるんだと思うんですが、ICM の使い方もよくわかりません。
>950 どこでその名を知った?場合によってはその書き込みはまずいぞ。
>953 お前、契約書ちゃんと読めよ・・・信じられん。 うちの社員だったらクビ飛んでるぞ。
文字列検索できる関数とかってありますか?教えてください。お願いします
961 :
デフォルトの名無しさん :04/12/26 15:02:31
strstr
>958 経験ないと分からない思うが、>953のようにリンクを 貼る行為は完全にNG。契約違反になるから説明できる とこがほとんどないんだけど、当事者になったときに 分かるよ。とりあえず>953はやばい。
>>962 「OTLS」「Microsoft」でググるとトップに出てくるURLなんだけど、
それが機密情報名わけ?ww
もう、おばかさん多いな...
やばい情報なら誰にでも見れるところに置くのはまずいと思うが…
どのみちURL出すとまずいような場合は最低でもbasic認証しておかないと法的根拠はないんじゃないか?
君以外は誰も限定なんてしてないよ。
おまいら釣られすぎだぞ!
>970 そう。962は俺が書いたんだけど、君だけが正解。
>962=>970 自演決定。
>964 契約書は読んだ?したっぱPGはそんなの気にしねーのか。 機密とかまったく関係ないよ。
>>974 953の書き込みがやばいやばいって言うから、
950のOTLSって単語に色つけてぐぐれば
契約云々関係ない第三者でもすぐ分かるぞってことでは。
ネタにまじレスしてる場合か? もうすぐ正月だぞ
>>977 もちつき、忘れるなよ
/\⌒ヽペタン
/ /⌒)ノ ペタン
∧_∧ \ (( ∧_∧
(; ´Д`))' ))(・∀・ ;)
/ ⌒ノ ( ⌒ヽ⊂⌒ヽ
.(O ノ ) ̄ ̄ ̄()__ )
)_)_) (;;;;;;;;;;;;;;;;;;;)(_(
みんな、コード書いてる場合じゃないぞ! |___|⌒ヽペタン .∩ || ⌒)ノペタン∩ | | /二つ ((.⊂ニヽ| | (,, ゚)| )) (゚Д゚,,) ノ つ ( ⌒ヽ ⊂,,ヽ O ノ ) ̄ ̄ ̄((_ ( )O (/ (/ (;;;;;;;;;;;;;;;;;;;)∪ヽ)
ネットにはいつもいるMr.守秘義務君が大騒ぎしただけだろ
981 :
デフォルトの名無しさん :04/12/27 02:51:10
ListViewCtrlのソートに関する質問です。 ソートを実行するコールバック関数で返した結果はすぐにリストに反映されるのでしょうか? リストアイテムのユーザデータにそのアイテムが登録された時のインデックス番号が格納されてあり、 コールバックに渡される2つのユーザデータから該当するカラムのテキストを取得して比較を行ってます。 こういう実装方法だとコールバックが返した結果がすぐにリストに反映されてしまうと 比較を行うたびに予め設定してあったインデックス番号が狂ってしまいますよね? 正しくソートを実行するためにはソートを実行する前にソートを行うテキストを ユーザデータとして設定するような事を行わなくてはならないのでしょうか? コールバック内でListView_FindItemするんでしょうかね。 みなさんはどう実装してますか?
意図ようがわからんが、 最初にやることはデバッガで追う事。 まあ回答してやってもいいが、 例えば俺がサイコロ振って適当に「反映されます」と回答したとして、 それを信用するかね? まあするんだろうね。 確率は1/2だから悪くはないわな。 というわけで、 最初のは「反映されません」 2番目は「行う必要はありません」 つーか、なんのためのコールバックかよく考えてみ? 最後のは「実装したことはありません」 これでどうだ
1こ抜けてたが >狂ってしまいますよね? に対しては、 「はいそうですね。」 以上だ。
知らないなら何も書かなくていいんですよ
残念ながら1/2の確率で知ってるんだが
ボキャブラリが許せばサイコロの面数によって微妙な回答も可能だね
では100面ダイスをどうぞ
OTLSってネタかと思ったよ。 だって、OTL ですよ。
>>982 ええとですねデバッグして検証はしたんです。
コールバック内で取得したテキストとソートを実行する前に予め設定したテキストを比較してみた所
まるっきり一致しませんでした。
で、ネットでいろいろなサンプルを漁ってたんですがその中に前者の方法でテキストを取得している
サンプルが幾つかあったので混乱したんです。
何らかのフラグの設定で反映されたりされなかったりするんかなとか思ったりもしたので
経験者の意見を聞きたかったわけです。
いろいろ試した結果最終的にはユーザデータをキーにListView_FindItemで検索したインデックス番号で
テキストを取得するようにしました。効率悪そうですが。
方法わかんないならソートをListViewの外でやって 後で一気にViewに反映した方が後々良いと思うんだが 目的がListViewのエキスパートになりたいならともかく
>>990 その方法は効率良さそうですね。盲点でした。
何が何でも中でソートする必要なんてないですもんね。
助言ありがとうございました。
>>982 そういえばお礼言ってませんでした。
大変親切な助言ありがとうございました。
>991 >その方法は効率良さそうですね。盲点でした。 えー
文字列検索できるAPIとかってありますか?教えてください。お願いします
>>989 私は登録順をユーザデータとして設定しているよ。
ソートのときはそれを利用している。
高々1000件くらいのリストならそれで充分ことが足りている。
↓次スレよろしく。 ちなみに、plalaは建てられませんでした。orz
999
1000 :
デフォルトの名無しさん :04/12/27 10:26:45
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。