大雑把に言って、WM_PAINTでべたべた描画するときはCreateWindow(Ex)。 コントロールをペタペタ乗せるときはダイアログ。 どっちも使うぜってときは、俺の場合CreateWindow(Ex)で作ったウィンドウに 子ウィンドウとしてダイアログを貼り付けることが多いかな。 ただし、うまくやらないとコントロールとの通信がやや煩雑になるかもしれない諸刃の剣。
ボタンを貼り付けようと思ったら 独立したボタン扱いになって画面外に置き去りになったことは良い思い出
ボタン ↓ 口 ┏━━━━━━┓ ┃ ┃ window ┗━━━━━━┛
ぼタン「一人でできるもん」
>>8 おいらどんなときでもダイアログで作ってた…
>>11 ダイアログエディタでボタンを配置していてそんな事になるか?
エディタなんて使わないモン
BlockInput(TRUE); これで制御停止させても Ctrl+Alt+Delete で解除されてしまう BlockInput(TRUE);の間Ctrl+Alt+Deleteを無効にするにはどうすればいい? RegisterHotKeyではダメだった
>>15 ExpressEditionを使ってる貧乏人ですか?
Ctrl+Alt+Deleteで解除されたら何か困るのか
内部でkeyevent発生させてるから処理終わるまで解除されないようにしたいんだよ
BlockInput(TRUE);の間お前のアプリがバグって再起動するまでCtrl+Alt+Deleteできなくなったらどうするんだよ
そう簡単に誤操作するような組み合わせでもないんだから そこまで無効にする必要ないだろ
キーボードを引っこ抜けばいい
Ctrl+Alt+Deleteを無効にして 別のキーストロークでBlockInputを解除する設定にしたいんだ 自分しか解除できないように デフォでCtrl+Alt+Delete=解除・再起動 とか設定されてるから他の誰かがCtrl+Alt+Delete押すかもしれないし
いますぐカーネルコードにパッチでも当てるんだな。 そんなあほな事がしたければ。
それいじるとセキュリティに問題出るからなあ
方法言ったらいいだけなのに何わけわからん質問してんだ? ここの住人はアホか?
質問に答える方も機械じゃないんだから 不可解だと思う場合は理由を聞きたくもなる そんなところでしょ
ウィルス製作の手助けなんてしたくないしな
グループポリシーで無効にしたらどうなるんだろ。
GINA差し替えればいいよ。
31 :
デフォルトの名無しさん :2008/05/15(木) 20:36:38
ctrl+alt+delをフックするにはGINAを差し替える。Vistaは知らん。 再起動とかのボタンを無効にするだけならグループポリシー。
if(WaitForSingleObject(handle, 0) == WAIT_OBJECT_0){ /* 処理 */ } こんな感じにスレッドの終了を感知したいんですがうまくいきません。 WaitForSingleObjectの返り値を見てみたら258などとなってしまいます。 待ち時間をINFINITEにすれば感知できるのですが、 0にして毎フレーム調べる、などはどうすればいいんでしょうか?
1. 他人のPCでウイルスまがいの自作アプリをこっそり走らせる 2. Ctrl+Alt+Deleteを押しても解除できない 3. 「PCがおかしいんだ!助けてくれ」と言われる 4. 自分だけが知ってる方法で解除 5. 「やっぱ○○さん凄いね」と周囲から尊敬の眼差し
ただ単にBlockInputを解除するボタンを変更したかっただけ GINAかグループポリシー調べてみる、ありがとう
WinAPIにある関数を使ってCTRL+ALT+DELETE無効は無理なんだな
>>27 なるほどなぁと思ったよ
>>26 みたいに「ただただ回答してれば良いのに」
っておもってたけど、そういう考え方もあるよな
Win32APIとなんも関係ないけど感動した
WinAPIでは無理って言うだけで済んだのにな >不可解だと思う場合は理由を聞きたくもなる わかるけど、己の欲望でレスするなよと
それは欲望とは言わん
なら知りたい欲望もここに書かなければ君のライフは万全だ
>>38 欲望というか「質問には全く関係ない事」な
>>32 258はWAIT_TIMEOUTだよ。スレッドがまだ終了してないってだけ。
怪しい質問か対エスパー質問が大半だからツッコミを入れたくなる
>>42 試しに
while(1){
if(WaitForSingleObject(handle, 0) == WAIT_OBJECT_0){
break;
}
}
としてもずっと検出できず、どうも上手くいきませんでした。
スレッド自体は1秒Sleepするだけなので終わらないはずはないのですが。
>>33 別に状態を見る関数があったんですね。
試してみます。
http://imepita.jp/20080515/861710 CreateWindowEx関数で作ったリストコントロールとタブコントロールの拡張ウィンドウスタイルに
WS_EX_CLIENTEDGEを指定しているのですが、タブコントロールがリストコントロールのようになりません。
原因が分からず苦労しておりまして、
どのようにすればリストコントロールのような縁になるのかご教授お願いします。
知らないならレスしないでください
知らないのでレスしません
>>44 それで検出できないはずはないんだが。
もしかして_beginthreadでスレッド作ってないか?
それだとスレッドが終了すると自動でハンドルが閉じられて使えなくなるぞ。
>>48 ああ、なるほど。
確かに_beginthreadでした。
exのほうで試してみます。
すいません、VBスレよりこっちのほうがいいかと思って来ました。 VB6でメニューコマンドを太字にしようと思って、 ポップアップだったら組み込みで入ってたんですが通常メニューはできないので hMenu = GetMenu(Me.hWnd) hFileMenu = GetSubMenu(hMenu, 0) Dim MII As MENUITEMINFO MII.cbSize = Len(MII) ' Len = sizeof MII.fMask = MIIM_STATE GetMenuItemInfo hFileMenu, 0, MF_BYPOSITION, MII ' 場所は仮 MII.fState = MII.fState Or MFS_DEFAULT ' Or = | SetMenuItemInfo hFileMenu, 0, MF_BYPOSITION, MII て書いて実現させました。 ところが、太字を解除しようと思って、上記の下から2行目を MII.fState = MII.fState And Not MFS_DEFAULT にしてみたのですが解除されません。 どうしたら解除できますか?
ホットキーとkeybd_event使ってJoyToKeyみたいなん作ってみたんだが オンラインゲームではJoyToKeyみたいに発動しないんだ なんで?
keybd_eventは古臭いから使うなアホ。 SendInputでKEYEVENTF_SCANCODE使って送れ。 DirectInputでも使える。 //実は昔JoyToKeyを調べたことがあって、JoyToKeyはkeybd_eventを使っている。 //ドキュメント化されていないが、第二引数にスキャンコードを渡すと、 //SendInputでスキャンコードを渡したのと同じ動作をする。 //ただし、ドキュメントにない仕様だから絶対使うな。SendInputを使え。 酷いゲームは、チート防止機能と称して、ルートキットまがいのことをやっているがな。 まあそんなWindowsがバージョンアップしたら自爆するようなゲームは無視していいだろ。
ありがとう 別プログラムで、IEプロパティ内の「**削除」をキー操作でやらせてるんだけど 削除中もキー送信してしまう 削除処理が終わるまで待つのって可能?
ネイティブなSendMessageの方がよくね?
こんばんは。 テキストかバイナリのベクタデータを、 一エレメントを長方形にしてベクタを連続して表示させ、 かつエレメントの値を色で表現・表示したい(短期ゴール)のですが、 どのようにコーディングすれば、またどのような関数を使えばいいのでしょうか。 例: 8ビット幅のエレメントについて、これを8ビットグレースケールに対応させて、 0h0000 0h0001 0h0002 ...... 0hFFFF で256個のエレメントを256個のモノトーン長方形 □ . . . ■ で表示させたいのです。参考になるサイトや本をご存知でしたら教えていただけないでしょうか。 よろしくお願いいたします。
ベクタデータって具体的に何?truetype? エレメントって何?ベクタデータを構成する部分曲線ってこと?
>ベクタデータって具体的に何 単なる値をエレメント、同じビット幅(レンジ)でその連続したデータをベクタといっています。 ベクトル演算とかのベクタです。 曲線データではなく、単なる値です。
わかった。間違い探しだな。
APIの質問なのか・・・ 宿題スレに行った方がよくね?
SendInputの使い方msdn見てもわからんorz サンプルplz
>>60 はじめそう思いましたが、上記は第一歩目ということで。。。
はじめは単なるプロットするだけですが、
それを最終的に各エレメント(要素)毎に操作できるようにしたいので、
よろしくお願いいたします。
貴方の考えを反映できるのは貴方だけ
っていうか配列って言えばいいじゃん紛らわしい SetPixelでも使えばいいよ
SetPixelは遅い
第一歩目なら遅くても問題ないだろ
>>61 MSDNを読め。構造体と共用体を深く学べ。
ここでサンプルを与えてしまうのはためにならん。
実際、それほど難しくない。
戸惑うとしたら、Cの知識が十分ではない場合だけだ。
スキャンコードはMapVirtualKeyで取得できる。
>>67 SendInputが宣言されてるヘッダ見た
→構造体とさらにunionが使われてるのを知る
→それらの値を設定
→キーストローク設定
→SendInput呼び出しでストローク実行
INPUT name[N];
SendInput(N, name, sizeof(name));
ありがと、なんとかなりそう
すみません、ハード屋なのでベクタといってしまいます。 SetPixelですか。調べてみます。最低数千の長方形(内側色付き)をプロットすることになるのですが、 その遅さはネックにならないでしょうか。 正直遅いと聞いたら使う気にはなれませんが・・・。
名無しには要件の詳細なんぞわからんのですよ
だったら、メモリ上にDIB(聞いたことない言葉ならBMPのことだと思え)を 作ってそれを描画するって形にすればいい。
仕事ならこんな所で聞くなよ
こんなんやってみたけど無理だったorz 1/2 #include<stdio.h> #include<windows.h> #define NUMBER 2 int main(void) { int i; MSG msg; INPUT SendKey[NUMBER]; for(i=0;i<NUMBER;i++) { SendKey[i].type = INPUT_KEYBOARD; SendKey[i].ki.wVk = 'A'; SendKey[i].ki.wScan = MapVirtualKey('A', 0); if(i == 0) { SendKey[i].ki.dwFlags = 0; } else { SendKey[i].ki.dwFlags = KEYEVENTF_KEYUP; } SendKey[i].ki.time = 0; SendKey[i].ki.dwExtraInfo = 0; } RegisterHotKey(NULL,0,NULL,'B'); RegisterHotKey(NULL,1,NULL,'A'); while(0<GetMessage(&msg,NULL,0,0)) {
2/2 switch(msg.message) { case WM_HOTKEY: switch(msg.wParam) { case 0: i=SendInput(NUMBER, SendKey,sizeof(SendKey)); printf("B %d\n",i); break; case 1: puts("A"); i=1; break; } break; } if(i==1) break; } UnregisterHotKey(NULL,0); UnregisterHotKey(NULL,1); return 0; } SendInputが0を返してしまう、なんで?
ソース貼るな馬鹿 どこかにうpしろ
じゃあテンプレにソース貼るなって入れろよ なんであかんのかkwsk
知らないならレスしないでください
とりあえず変数の使い回しは止めようよ バグが怖いから
世の中にはソースコードを貼り付けられる、無料のWebアプリがたくさんあってだな。 dwFlagsにKEYEVENTF_SCANCODEを忘れている。
貼るにしても最小コードにして貰いたいものだ
そうすると、そこだけ張られても分からねえってなる予感。 話逸らしてすまんが。
回答以外のレスは不要です
>>74 puts("A");
↑
なにこの顔、ふざけてるの!?
>>83 不覚にもワロスwwwwwwwwwwwwwwwww
while('A') { }
87 :
74 :2008/05/17(土) 02:55:03
'A' 'c' 'o' '-' こういうのが顔文字に見えないようなフォント誰か教えてくれ
いっそのこと歌舞伎にしか見えないフォントとか
馬鹿にしか見えない文字?
ボタンとかリストビューとかのコントロールで、 Set/GetWindowLongPtr を使って GWLP_USERDATA をいじってよいのでしょうか? MSDNには一応 「This data is intended for use by the application that created the window.」 と書いてあるのですが、WM_USERと同じで使っちゃいかんと言う人もいるみたいで……
気になるならSetProp/GetPropを使えばいい サブクラスならSetWindowSubclassが安全
93 :
91 :2008/05/17(土) 11:43:21
>>92 ありがとうございます
SetPropを使ってみます
SendInput使ってコマンド登録してもオンラインゲームでは発動しなかったorz
だまれ
だからSendInputなんて使わないでSendMessage使えよって話
結局BOTかよ芯でこい
99 :
94 :2008/05/17(土) 18:11:43
別にいいんじゃね?「使う事」より「作る過程」の方が 楽しいと思えるならBOTでもなんでもいいと思うんだがな。(勉強という意味で) 実際俺がそうだったわけだしフック、APIフック、逆汗は そういった「目的」があったからこそ覚えたわけで。 まあ、全てが俺みたいな考え方してるわけじゃないし、 やる上でどう感じるかは人それぞれか。
明確にBOTだと言い切ってしまうとローカルルールに触れるかもしれない。 ま、俺はどうでもいいがね。
102 :
96 :2008/05/17(土) 18:24:05
オンラインゲームではなぜ反応しないのか どうやれあ反応するのか これに興味持ったからやってるだけだよ JoyToKey+PPJoyじゃないとうまく動作しないのも関係あるんかな
>どうやれあ × >どうやれば ○ ホットキーしてたかB認識しなかった
俺なら例え知ってても教えないわ
たまに独り言言うウザイ奴沸くけどスレに貼りついてるんか? 当事者以外にも不快感与えるから独り言は書き込むなよ 精神年齢幼いの曝け出してるようなもんだぞ
うわ、あのキ●ガイが質問してたのか
ここまで俺の独り言
指定したウィンドウを不可視状態にする(最小化ではなく、タスクバーからも消える)関数って作れますか?
とりあえずこれでも実行してストレス溜めろ while('A'){ BlocInput(TRUE); Sleep(500); BlocInput(FALSE); Sleep(500); }
>>113 ShowWindow(hwnd, SW_HIDE);
>>115 BlocInput(笑)
BlocInputは引数に笑も取れるのか
お前らそんなしょうもない事してる暇あるなら 社会に貢献するようなソース書けよ
>>120 ExitWindowsEx(EWX_SHUTDOWN, 0);
実行すると自動でPCをシャットダウンしCO2削減に貢献
(SeShutdownPrivilegeの取得等は省略)
指定されたフォルダ内のファイルが作成、削除、更新されたら そのファイルの名称等を知りたい。 検索してみたところ、ReadDirectoryChangesW() や SHChangeNotifyRegisterあたりを使えば良さそうな感じ。 winXP+vb6.0でもいけるだろうか?
ためしてみればわかるだろうか?
ためしていただけないだろうか?
( ゚ω゚ ) お断りします
おまいら好きだwwwwwwwwwwwwwwwww
VIP臭いんだけど
130 :
デフォルトの名無しさん :2008/05/18(日) 13:53:22
お前がな
ふうん
AbornThread( "pc11.2ch.net", "tech", "1210775622.dat" );
タスクバーとスタートメニューのプロパティってどうやれば開ける? コンパネからショートカット引っ張り出して.lnkアクセスするしかない?
すみませんDCOMについて質問させてください。 リモートPCのCOMを呼び出す簡単なコードを作成したんですが、 思ったように動いてくれませんでした。 CoCreateInstanceEx()にリモートPCのIPを渡してやるんですが この関数から戻ってくるのに時間がかかって失敗します。 ためしにローカルのIPを渡してやると成功するんですが。 以下にソースを記載します。 どこかおかしなところがないか教えていただけないでしょうか。 ::CoInitialize(NULL); COSERVERINFO serverInfo = { 0, "192.168.1.2", NULL, 0 }; MULTI_QI qi = { &__uuidof(ITest), NULL, S_OK }; HRESULT hr = CoCreateInstanceEx( __uuidof(Test), NULL, CLSCTX_REMOTE_SERVER, &serverInfo, 1, &qi); ITestPtr p; p.Attach(reinterpret_cast<ITest*>(qi.pItf)); p->func(); p = NULL; ::CoUninitialize();
>>133 Shell32.Shell.TrayProperties
>>134 サーバ側の用意ができていないんじゃね?
時間がかかって失敗といえば、たいてい接続のタイムアウトだし。
サーバ側のDCOM関連の設定を見直しだな。
それじゃ使い方わからんと思うけど
DCOM関連の設定というのがあるんですか。 そのあたりの詳しいやり方が説明されてるサイトとか知りませんか?
dcomcnfg
140 :
デフォルトの名無しさん :2008/05/18(日) 20:59:40
Vistaで追加されたBeginBufferedPaint等のAPIって何のために使うんでしょうか? MSDNで探してもリファレンスは見つかるけど これを使う目的やメリットがわからなくて・・・・
>>133 START shell:::{0DF44EAA-FF21-4412-828E-260A8728E7F1}
>>140 多分GDIがソフトウェアレンダラになったから、これまでみたいにGDIだけで同じ事をすると
XPより重くなるので専用のAPIを用意して誤魔化したのだと予想
>>140 自動ダブルバッファリングみたいな感じ?
Vistaだとパフォーマンス上げるのに必須だから、楽に使えるAPIを用意した、ってところかな。
一通り目を通してみたが、Animation系は結構使えそうだ。
144 :
140 :2008/05/18(日) 23:56:23
>>142 ,143
一応使ってみた感じだと画像がちらつかないのでダブルバッファリング用のAPIだと思うのだけど、
今までのようなメモリDCを使わずに、専用のAPIを用意した、という認識でいいのかどうかちょっと不安。
メモリDC使うのと大して手間はかからないような気がしないでもない。
Alpha値セット用のBufferedPaintSetAlphaとかも用意されてるみたいだけど。
こういう時に使うと便利!っていう説明が欲しいなぁ。
>>143 >>144 従来の方法(CreateCompatibleBitmapで作ったDDBに描画してからBitBltする)だと
XP以前のDDBは大抵VRAM上に確保されてVGAの恩恵を得られたが、Vistaではそうは行かなくなったので
その辺を解決する専用APIを用意したのじゃないかと
>>145 なるほどね。
Animation系のも使ってみた。
アニメーションの前後のDCを一度のAPI呼び出しで取得できるんだ。
実際に描画してみたら軽いフェードアウト効果?みたいなぼわっとした残像も描画された。
VistaっぽいちゃぁVistaっぽいな。
147 :
デフォルトの名無しさん :2008/05/19(月) 23:22:49
SetWindowsHookEx して注入したDLL内でCOMコンポーネントを使いたいのですが、 CoInitialize / CoUninitialize しても大丈夫なのでしょうか? 注入先のプロセス内ですでに呼ばれていたらまずそうな気がします。
それらの関数は、上手くネストするように同じ回数だけ呼べば問題ない。 全く問題ないわけではないけど。
ListViewで選択したリストが青くなってわかりやすくなるけどそのウィンドウがフォーカスを失うとき(Tab押下、windowsボタン押下など)灰色になるのですが、 これがフォーカスを失っても青のままにしたいのですがどのようにすればよいのでしょうか? 普通のWM_NOTIFYではフォーカスを失ったときブレークポイントにかからなくて、 WM_ACTIVATEではNMHDR構造体がなくてカスタムドローできません。 いい方法があったらご教授願います。
別スレッドのキャレットを変更したいと思い GetGUIThreadInfo(GetWindowThreadProcessId(NULL, &fwid), >info); HideCaret(gtinfo.hwndCaret); CreateCaret(gtinfo.hwndCaret, NULL, widht, height); ShowCaret(gtinfo.hwndCaret); とやってみましたが上手くいきません、 hwndCaretまでは取れいるようだし、 自プロセスであれば変更されます。 何が間違えているのか教えてください。 やはり、いくつかあるキャレット変更ソフトのように DLLをフックさせなければ無利なのでしょうか?
全然知らんから適当だが、 別スレッドのUIを操作するのは無理だと思う
>>149 LVS_SHOWSELALWAYSスタイル付ければいいような気がする
>>148 試したところ上手くいきました。ありがとうございます。
検証コード
#include <windows.h>
#include <msxml2.h>
#include <stdio.h>
#pragma comment(lib, "ole32")
#pragma comment(lib, "msxml2")
void examine() {
static int counter = 0;
IXMLDOMDocument* pv = NULL;
HRESULT hr = CoCreateInstance(CLSID_DOMDocument2, NULL, CLSCTX_INPROC_SERVER, IID_IXMLDOMDocument, (void**)&pv);
printf("%d : hr=%08lx\r\n", ++counter, hr);
if (SUCCEEDED(hr) && pv) { pv->Release(); }
}
void main () {
examine(); CoInitialize(NULL);
examine(); CoInitialize(NULL);
examine(); CoInitialize(NULL);
examine(); CoUninitialize();
examine(); CoUninitialize();
examine(); CoUninitialize();
examine();
}
>>153 DllMainでCoInitializeを呼ばないように注意して書いた方がいいぞ
>>152 それはすでにやっていて、フォーカスが外れても灰色にはなるのですが
その灰色になる時に青いままにしたいのですが無理でしょうか?
できないことも無いけど、フォーカスが無いことをユーザーはどうやって知るの?
教えてから訊いてやれよw
>>151 そうなんですかね、
あきらめてフックしなきゃダメか。
>153 それはアパートメントはどーなるんだ? MTAとか混じってたら死亡でないのか?
海外ドメイン規制で書き込めねー
>>51 やってみたんですがダメでした。成功したらまた来ます。
162 :
デフォルトの名無しさん :2008/05/21(水) 09:34:44
BMPの描画でダブルバッファリングを行いたいのですが、 〔背景BMP+新BMP〕HDC hdcBmp = 背景BMP HDC hdcBmp3 = CreateCompatibleDC(hdcBmp); HBITMAP hBMP3 = CreateCompatibleBitmap(hdcBmp,300,300); SelectObject(hdcBmp3,hBMP3); BitBlt(hdcBmp3背景BMPの上に新BMPを描画); case WM_PAINT: BitBlt(GetDC(hWnd),hdcBmp3を描画); 背景BMPに新BMPをくっつけたものを描画したいのですが 背景BMPが黒で塗り潰されてしまいます。 ┏━━━━━━━━━┓ ┃背景BMP ┃ ┃┏━━━━━━━┓┃ ┃┃新BMP ┃
それでどうしたいんだ?
背景BMPが黒になるのを防ぎたいです。
>>162 ,164
その疑似コードだけ見ると、hdcBmp3に背景BMPを描画していないように
思えるが。
>>165 BltBlt(hdcBMP3,背景BMP);
BltBlt(hdcBMP3,新BMP);
これで大丈夫でしょうか?
>>162 CreateCompatibleBitmapにメモリDCを指定しては駄目。
あと
>case WM_PAINT:
>BitBlt(GetDC(hWnd),hdcBmp3を描画);
これは駄目だろ
>>167 CreateCompatibleBitmapには何を指定すればよいのでしょうか?
GetDC()あるいはCreateDC("DISPLAY")の結果あたりを渡すのが吉
描画用バッファは面倒だから全部DIBSectionでいいよもう
>>162 突込みどころ満載のソースだな
まぁ頑張れw
>>162 背景と前景を自前で合成して描画すればおk
GDIはあと何年くらい使われるんだろう
俺はwin32APIで作れなくなったら、ウィンドウズソフト開発から身を引く。引退。 MFCとかプログラミングじゃねーよ。あれ
なんでやねん
>>174 MFCなんて一皮剥けばバリバリWin32APIじゃないか
>>177 プログラミングスタイルが受け付けない
TODO:ここにプログラム書いてね。みたいなのばかり。
しかも、いちいち用意されてる関数調べて、くっつけるだけ。
それで動かしてみて、動いてよかった。で終わり。
こんな状況でバグが出たら、生き地獄だ。
はあ?
用意されてる関数しらべてくっつけるだけってそれ以外のぷりぐらみんぐおれしらねー
>>178 Win32APIの勉強始めた頃は俺もそう思ってた。
今じゃGUIライブラリ無しで作る気起きませんサーセン
>>172 HDC hdc, hdcBmp[1], hBack[1];
HBITMAP hBmp[1];
BITMAP bm;
hdc = GetDC(hWnd);
hdcBmp[0] = CreateCompatibleDC(hdc); //背景BMP
hdcBmp[1] = CreateCompatibleDC(hdc); //新BMP
hBack[0] = CreateCompatibleDC(hdc); //合成BMP
hBmp[0] = (HBITMAP)LoadImage(hInst,MAKEINTRESOURCE(IDB_BITMAP1),IMAGE_BITMAP,0,0,LR_DEFAULTCOLOR);
hBmp[1] = (HBITMAP)LoadImage(hInst,MAKEINTRESOURCE(IDB_BITMAP2),IMAGE_BITMAP,0,0,LR_DEFAULTCOLOR);
SelectObject(hdcBmp[0],hBmp[0]);
SelectObject(hdcBmp[1],hBmp[1]);
// バックBMP
hBack[0] = hdcBmp[0];
BitBlt(hBack[0],0,20,bm.bmWidth,40,hdcBmp[1],0,20,SRCCOPY);
ReleaseDC(hWnd,hdc);
case WM_=PAINT:
BitBlt(hdc,0,100,bm.bmWidth,bm.bmHeight,hBack[0],0,0,SRCCOPY);
hdcBmp[0]とhdcBmp[1]に背景と新BMPを読み込み、背景と新BMPを合成したものをhBack[0]に読み込む。
そしてWM_PAINT時に合成した画像を描画する。という事ですか?
標準関数も用意されてる関数だよなって突っ込みはなし
5月14日に民主党の円より子参議院議員から、ある嘆願が提出されました。内容は、「美少女
アダルトアニメやゲームを規制すべき」というものです。もしもこれらが規制されてしまうことに
なれば、全国のモテない童貞男子諸君にとって大打撃です。
この嘆願が提出された理由ですが、ちょっとひどい。
街中に氾濫(はんらん)している美少女アダルトアニメ雑誌やゲームは、小学生の少女を
イメージしているものが多く、このようなゲームに誘われた青少年の多くは知らず知らず
のうちに心を破壊され、人間性を失っており、既に幼い少女が連れ去られ殺害される事件
が起きている。これらにより、幼い少女たちを危険に晒(さら)す社会をつくり出していること
は明らかで、表現の自由以前の問題である。社会倫理を持ち合わせていない企業利潤追
求のみのために、幼い少女を危険に晒している商品を規制するため、罰則を伴った法律
の制定を急ぐ必要がある。
ついては、美少女アダルトアニメ雑誌及び、美少女アダルトアニメシミュレーションゲーム
製造及び販売規制の罰則を伴った法律を制定されたい。
物凄く分かり易く要約すると、「エロゲーをする奴は心が壊れていて人間じゃないから幼女を
強姦する。だからエロゲーを規制しろ」ということになります。ええと、円議員あなたの血は何色
ですか?
だいいち嘆願理由にしても私から言わせて貰えば、「ゲームをしているうちに心が破壊される」
のではなく、「現実世界で心が破壊されたからゲームに逃げた」のです。よくよく考えれば普通の
人は分かるはずです。あれはタダの絵だ、と。
この「美少女アダルトアニメ雑誌及び美少女アダルトアニメシミュレーションゲームの製造・販
売を規制する法律の制定に関する請願」に賛同している議員は、円より子参議院議員のほかに
は、同じく民主党の下田敦子参議院議員がいます(5月21日現在)。増えないことを祈るばかりです。
http://digimaga.net/200805/adult-game-user-is-not-human.html
>>182 まずは分かりやすい変数名を付ける事から学べ
186 :
デフォルトの名無しさん :2008/05/21(水) 20:19:12
>>185 すみませんでした。
背景用変数 = 背景BMP;
貼付けるBMP用変数 = 新BMP;
上部二つの合成用変数 = 合成したBMP(背景BMP+新BMP);
BitBlt(上部二つの合成用変数);
>>186 まずは分かりやすい変数名を付ける事から学べ
188 :
デフォルトの名無しさん :2008/05/21(水) 20:50:50
>>188 お前はプログラマに向いていない
転職をおすすめする
仕事でやってんならもう少しまともなコメントぐらいつけろよ そのゴミソース引き継いだ奴はめちゃくちゃ苦労するんだよボケがw
>>182 WM_PAINTがきたときに背景BMPと重ねるBMPを
自前で合成して一度のBiBlt呼び出しで描画するという意味。
それぞれのBMPはメモリ上にあるんでしょ?
とりあえずこれで動くものを作ってから原因とか考えながらゆっくりAPIの使いかた覚えればいいと思うよ。
つい最近VC++2008ExpressEditionをいじり始めたものです。 テキストエディタまがいのものでもつくってみようと始めたはいいのですが、 GETOPENFILENAME 関数を使ってファイルを開くダイアログを作ろうとしたところ、 "OPENFILENAME構造体が定義されていない" とエラーが出ます。 てっきり windows.h で定義されていると思っていたのですが、 これでないならなんのヘッダをインクルードすればいいのでしょうか?
>>192 Declared in Commdlg.h, include Windows.h
てっか、WindowsSDK入れてる?
>>192 WIN32_LEAN_AND_MEAN
>>191 WM_CREATE等最初に合成したものを
WM_PAINT時に使うということですか?
>>182 ソースが突込み所満載なんだがまさか釣りじゃないよな?
本気で書いたソースならC言語についてもやばいぞ
198 :
192 :2008/05/21(水) 22:22:28
>>194 自動で定義されていたそれをコメントアウトしたら解決しました。
ありがとうございます。
>>193 さんもありがとうございました。
>>156 WM_ACTIVATEでフォーカスを失った時にブレークにはかかったのですが、
カスタムドローするのに必要なパラメータがなかったのでできませんでした。
オーナードローで頑張ればできるのでしょうか?
202 :
デフォルトの名無しさん :2008/05/21(水) 22:52:33
聞きたいのですが、 BITMAPの合成はどうやればよいのですか?
>>195 別にWM_CREATE時じゃなくていいよ。
ちらつきを抑えたいからダブルバッファしたいんだろうからBMPは常にメモリ上にあるという仮定で、
WM_CREATEがきたときに別途mallocでもnewでもいいからバッファを確保して
そのバッファに背景BMPと表示したいBMPを合成したものを作成。
それをBitBltやStretchDIBitsのような描画関数で表示。
204 :
デフォルトの名無しさん :2008/05/22(木) 00:00:22
WindowsX.h にある HANDLE_MSG() マクロを WM_COMMAND に対して使うとき、なんで return 0; になるんだ? HANDLE_MSG() に渡すfn は void func(HWND...) でvoid型だし、HANDLE_MSG() 自体も #define HANDLE_MSG(hwnd, message, fn) ¥ case message):return ((fn)(hwnd,...),0L) でマクロ展開で「return 0;」が出てくる理由がよく解らん。 case message: return func(hwnd,...); //func() はvoid型 になるんじゃないの?
カンマ演算子 return a, b; returnされるのはbの値。
メッセージクラッカって定義おかしくね? WM_DRAWITEMとか、 > If an application processes this message, it should return TRUE. って書かれてるのにvoidでreturn 0;されてるし
207 :
デフォルトの名無しさん :2008/05/22(木) 06:17:56
さんくす
>>205 カンマ演算子、か。K&Rの演算子の表の一番下に確かにそんなのあるな。いままで意識した事無かった
ありがと
>>205 間違っています。
以上。
↓次の方どうぞ
キモ
キモ
ゲーム作ってるんだけど、メモリ内のデータ書き換え防止する方法とかある? 外部アプリからメモリ内サーチして書き換えるやつ防止したい。助言よろ。
PCの電源切れ
>>211 オンラインゲームじゃないなら、改造対策は不要では?
俺もゲーム作ってるんだが、ブログで改造対策のこと書いたら、
「改造対策する時間があるなら、ゲームのボリュームを増やすこととか、
もっとまともなことに使って欲しい」ってコメントが多かったよ。
改造するかはユーザーの自由なんだし、ユーザーとしては当然のコメントだが。
あと、いまどきの改造は、プロセスメモリエディタ+ルートキットで
やるから、改造を防止するなら、ユーザーから非難されることを覚悟のうえで
ルートキットじみたことをするしかないでしょうね。
VC++のリソースエディタでダイアログボックスが作れますが、 そのような外観の(ダイアログでない)ウィンドウを、 ウィンドウクラスで作ったウィンドウに、コントロールぺたぺた貼って作ろうと思ったら、 (CWndではなく、RegisterClassEx、CreateWindow使って) ・ウィンドウの背景色は何故かCOLOR_BTNSHADOWが(ダイアログと)等しい ・エディットボックスはCreateWindowExの第1引数にWS_EX_CLIENTEDGEにしないと立体の縁にならない ・フォントはWM_SETFONT使ってサイズを変更しないと文字がでかい ・そもそもデフォルトのフォントが当然MS shell dlgではないようで、よくわからない (ただ、画面のプロパティから、故意にダイアログとウィンドウのフォントを違うものにした覚えはない…) 実際CreateDialogマクロでダイアログが作られるとき、ここら辺の設定ってどうなっているのですか? このマクロもCreateWindowExを使ってウィンドウを作ると書いてあるので、 同じようなことが再現できるのではと思ったのですが… (CreateDialogがウィンドウの大きさを決めるとき、フォントを元に作ってあるのはわかったのですが…)
Process Explorerで表示できるWindow Titleと同じものを取得したいと思っています。 どうもGetWindowTextで取得できるものとは別物らしく、 Process ExplorerでJuneブラウザのWindow Titleを見ると、 GetWindow〜で取得した名前とは違うものを表示しているのがわかります。 一体Process Explorerで表示できるWindow Titleとは何者か、 どうすれば取得できるのでしょうか?
使えないAPIなんですか。エディットコントロールじゃなければいいはず…ですよね。 そうするとWindow Titleってなんだろうという話になりまして、 たとえばJaneブラウザを表示したとき、以下のようになります。 ・キャプションバー、およびProcessExplorer上WindowTile列の表示 →”Jane Doe Style 【プログラム】 - Win32API質問箱 Build66” ・GetWindowText、およびタスクマネージャ上の表示 →”Jane” ”Jane Doe Style 【プログラム】 - Win32API質問箱 Build66”の文字列を取得したいわけですが、 その方法はご存知でしょうか?
Delphiアプリケーションには実は見えないアプリケーションウィンドウがあって・・・
>>218 VBアプリもそんな感じだったな
だからタスクバーに表示しないプロパティなんてのがあるんだけど
spy++ とか眺めてみるといいと思う
あー…なんとなくイメージ掴めてきました メインウィンドウに見えたのは子ウィンドウで、だから取得できなかったと。 子ウィンドウのウィンドウタイトルの取得とか、そのあたりを調べてみます。 ありがとうございます
>>217 こんなんでいいのかな?
#include<windows.h>
#include<stdio.h>
int main(void){
char title_buf[256], *class_name="TMainWnd";
int title_len;
HWND hwnd;
hwnd=FindWindow(class_name, NULL);
if(hwnd==NULL){
printf("Window not found. class name [%s]\n", class_name);
return 1;
}
title_len=GetWindowText(hwnd, title_buf, sizeof(title_buf)-1);
if(title_len>=0) printf("%s\n", title_buf);
return 0;
}
>>222 どうもです
実行結果とSpy++を併せて見て、おおよそ理解できました。
デルファイでもVBでもデフォルトのクラス名でウィンドウを検索したのち、
目的の名前を取得する事ができました
ありがとうございます
WM_GETTEXTでいいのでは
> title_len=GetWindowText(hwnd, title_buf, sizeof(title_buf)-1); 今時こんなソース書く奴はJavaか.NETで開発してろよと思う
>>225 この場合同書くのがいいのかも示して欲しいです
TCHARじゃないとかARRAYSIZE, _countofを使えとかnullは考慮されてるから-1はいらないとか あたりじゃない?
grep で include 内を探したけど ARRAYSIZE と _countof とは無かった (使用しているのは MinGW)
>>229 ARRAY_SIZE と countof はあったの?
_countofはMFCで定義されていてVC2005ぐらいからCRTでも定義されてた気がする
SDKにはwinnt.hにRTL_NUMBER_OFがある
いずれにしろ
>>222 は人に教えられる立場で無いのは確か
結局は、どう書くのが模範解答になるんでしょう?
WinAPIはよく知らんのだが、GetWindowText()の戻り値ってエラーチェックくらいしか使い途ないのかな。 >222もエラーチェックにしか使ってないようだし、>228によればナルターミネートはしてくれているようだし。 つーか、溢れたかどうかは単純には判らないのね。
>>222 は
if(title_len>=0) printf("%s\n", title_buf);
を
if(title_len>0) printf("%s\n", title_buf);
にしないとエラーチェックになってない
>>234 GetWindowTextLengthで事前にバッファ長を調べておけば済むだろ
GetGlyphIndices()という、文字列からグリフインデックスに変換するAPIがありますが、 この逆のことをするAPI、つまりグリフインデックスから文字列に変換する方法って解りますか?
バッファ足りなくてもバッファサイズまでコピーする仕様なの? そうだとしても戻り値にNULL文字は数えないって書いてあるから 指定サイズ==戻り値ならあふれてるのでは。
>>236 しかし長さを調べた直後には別のウィンドウタイトルに変わっているかもしれない
そのアプリケーションがどう振舞うか想定できない
そんな事を気にするなら他プロセスのテキスト取得なんて考えないことだ (そろそろフックネタ出す奴が現れる頃か)
仮にバッファ長が100だったとして、GetWindowTextLength()が99を返した後GetWindowText()が99を返しても、 その間にタイトルが書き換わっていたら溢れたかどうかは判らないのね。
>>240 >>242 必要十分なサイズのバッファを渡せば溢れる可能性は無くなる。
LPTSTR buffer = (LPTSTR)malloc(sizeof(TCHAR) * 0x7fffffff);
if (buffer == NULL) {
MessageBox(NULL, _T("この環境では使用できません"), _T("メモリ買いましょう"), 0);
exit(-1);
}
GetWindowText(hwnd, buffer, 0x7fffffff);
32bit環境だと/3GBスイッチ使っても厳しそうだ。 VirtualAllocのMEM_RESERVEでアドレスだけ確保して、 SEHで動的にメモリを割り当てるのが現実解だな。
ヒント:APIフック
たまにはブローとかアッパーとかさぁ
まずはジャブから
このスレの質が低下したのは、優秀な人は.NETに移ったからかもな。
正解
今頃気付いたのか
Advanced Windowsの著者だって.NETの本を書くこんな世の中じゃ
poizun
poison
prison
ぬるぽ
ga
てか、sizeof(title_buf)-1を最後の引数に指定してるから、 溢れる可能性など皆無だが? 溢れるとかなに言ってるんだ?
↑理解していない何か
↑話を理解している天才
↑流れを読む天才
↓通常の流れに戻すという偉業を成し遂げた天才
#include<stdio.h> #include<windows.h> int main(void) { /**/MSG msg; /**/while(0 < GetMessage(&msg,NULL,0,0)){ /******/switch(msg.message){ /**********/case WM_KEYDOWN: /**************/puts("keydown"); /**************/break; /******/} /**/} /**/return 0; } これで何かkey押してもダメなんだけどどうすればいい?
ウィンドウが無いじゃんか
コンソールに表示させたいん
な ん で ( ´∀` ) や ね ん !
プロシージャならメッセきたら処理するけど コンソールの場合はどうやるのか気になって
268 :
デフォルトの名無しさん :2008/05/23(金) 13:12:02
CreateWindowでスタティックテキストを作りました。 テキストの背景色を透過したいんだけど、いい方法ありませんか? hStatic = CreateWindowEx(0, "STATIC", cString, WS_VISIBLE | WS_CHILD | SS_SIMPLE, X, Y, Width, Height, hWnd, (HMENU)Static, (HINSTANCE)hInst, NULL);
WS_EX_TRANSPARENTじゃダメ?
270 :
268 :2008/05/23(金) 13:31:00
>>269 ダメでした。。
レバーコントロールに入れたツールバーにスタティックテキスト置いてます。
hStatic = CreateWindowEx(WS_EX_TRANSPARENT, "STATIC", cString, WS_VISIBLE | WS_CHILD | SS_SIMPLE,
X, Y, Width, Height, hWnd, (HMENU)Static, (HINSTANCE)hInst, NULL);
ツールバー、もしくはメニューの背景にブラシを使う事は出来ますか?
WM_CTLCOLORSTATICでNULL_BRUSHを返す
あるプロセスが、自分を起動したプロセス(親プロセス)を知る方法はありますか。
ある
レバーじゃなくてリバーだと思う
"レバーコントロール" の検索結果 約 1,270 件中 1 - 10 件目 (0.13 秒) "リバーコントロール" の検索結果 約 185 件中 1 - 10 件目 (0.13 秒)
>>276 それ「レバー」「コントロール」別単語として検索した結果だから
どっちもすくな!
リバーコントロールでググると もしかして: レバーコントロール と出るなw
280 :
268 :2008/05/23(金) 14:28:43
>>272 どうも。WM_CTLCOLORSTATICメッセージ勉強してみます。
レバー ReBar に一致する日本語のページ 約 268 件中 1 - 30 件目 (0.03 秒) リバー ReBar に一致する日本語のページ 約 277 件中 1 - 30 件目 (0.24 秒)
rebarの発音はrí:bà:rだからリバーと読む方が実際の発音に近い つまりレバーと読みたいならパーチーとかボデーとか言ってろってこった
↑アホ
285 :
デフォルトの名無しさん :2008/05/23(金) 15:35:16
↑話を理解してない馬鹿
ReBarをレバーっていうのは斬新だなw
↑馬鹿
↑はずれ
レバーという表現は日本語としても定着してるんだからいんじゃね?
意味が通じるなら、それでおk。
>>291 定着していません。
ほとんどの日本人はレバーと聞くと肝臓の事だと認識します。
取っ手(lever)と認識する人も居るよ
ReをReTryとかのReって解釈する人もいる
Win API ReBar レバー 11件 Win API ReBar リバー 100件 Yahoo
↑全角数字馬鹿
うーん、、、全角数字の時点で言い訳できないな
ほとんどの日本人はリバーと聞くと川の事だと認識します。
ReBarって書けばいいんだよ カタカナ読みに拘ると面倒事になるだけだ
このスレで「リバー」だとriverよりはrebarだろう。 このスレで「レバー」だとliverやleverよりは「rebarのことなんだろうなぁ」だろう。
↑話を理解してない馬鹿
え?あれ取っ手付いてるからレバーなんだと思ってたよ 別モノだったのかw
BitBltやStretchBltで表示した画像が解像度を変更すると消えてしまい困っています。 WM_DISPLAYCHANGEでWM_PAINTを投げたりInvalidateRectを投げたりしましたが再描画されません。 SW_MINIMIZEとSW_NORMALを立て続けに投げる方法は表示される時とされない時があり駄目なようです。 どうすれば解像度変更直後にきちんと再描画出来るようになるのでしょうか。
おっ!質問きたぞ 雑談はこれまでだ
>>307 WM_PAINTで描画してるんだよな?
再描画されないことは無いと思うが、いったいどうやってんの?
再描画されないとは具体的にどうなんのの?
>WM_PAINTを投げたり
まあこれ見て怪しいのはわかるが。
InvalidateRectの後にUpdateWindow呼んでる?
311 :
309 :2008/05/23(金) 17:02:18
一応書いておくけど WM_PAINTを投げたくなったら、 InvalidateRect → UpdateWindow のコンボで。 InvalidateRect自体は投げてるみたいだから、この場合は解決策じゃないけど。
>>311 RedrawWindowにRDW_UPDATENOWを指定すればいい
なんちゃってAI作った人いる?
>>313 const char* msg[] = {
"↑話を理解してない馬鹿",
"知らないならレスしないでください",
"それぐらい察してほしかったってのが本音"
};
for(;;) post2ch(msg[rand()%3]);
316 :
307 :2008/05/23(金) 18:17:10
InvalidateRect(hWnd, NULL, FALSE); UpdateWindow(hWnd); RedrawWindow(hWnd, NULL, NULL, RDW_UPDATENOW); これらを投げても駄目でした。 画像のみを表示するソースはウィンドウを透過すれば(SetLayeredWindowAttributes)特に何もしなくても表示されました。 透過しないとやはり何も表示されません。 CreateWindowExでボタン、ステータスバー、ツールチップを追加している問題のソースではこれらコントロールは再描画されるのに画像が表示される場所はまるで非表示にしたかのように背景色のみになっています。 もう訳が分からないですo...rz。 もしかしたらウィンドウプロシージャの書き方に問題があるのかも知れませんが、以下の各caseのbreak;をreturn 0;に書き換えると何故かウィンドウの挙動も表示もおかしくなり、CPU使用率も100%になってしまいます。 因みに今回の場合はreturn 0;に書き換えても症状は改善しません。 LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) { switch (msg) { (中略) case WM_PAINT: SetStretchBltMode(hDC, STRETCH_DELETESCANS); StretchBlt(hDC, 10, 10, 256, 192, hCompatDC, 0, 0, bmp.bmWidth, bmp.bmHeight, SRCCOPY); break; (中略) } return DefWindowProc(hWnd, msg, wp, lp); }
>>316 ・・・BeginPaintとEndPaintは・・?
hDCはどこからきたの?
やはり怪しかったのね
WM_PAINTでBegin/EndPaint忘れって上にもあるし前スレにもあったな いったい何を見て勉強してるんだ?
猫だろ。どうせ。
犬希望
WM_PAINTワンBeginPaintワンワン
MFC使えとまでは言わないけど、コンストラクタ・デストラクタでBegin/EndPaintをラップした クラス程度は作っておくと便利よ。
それならOnPaintをオーバーライドするだけで描画できるクラスを作った方が遥かに便利
CpaintDC と OnDraw ですね
つうか今時MFCやWTLを使わずに素のWin32SDKでアプリ作る奴なんているの? 死ぬほど面倒じゃん
328 :
316 :2008/05/23(金) 19:39:21
static PAINTSTRUCT ps;
(中略)
BeginPaint(hWnd, &ps);
SetStretchBltMode(hDC, STRETCH_DELETESCANS);
StretchBlt(hDC, 10, 10, 256, 192, hCompatDC, 0, 0, bmp.bmWidth, bmp.bmHeight, SRCCOPY);
EndPaint(hWnd, &ps);
return 0;
にしたら正常に表示されました。本当にありがとうございました。
一見正常に動いていたのはDefWindowProcに処理を回していたからなんですね。
因みに参考にしたサイトはこちらです。
Programing Place
ttp://www.geocities.jp/ky_webid/index.html >>324-327 VC++2008EEでC及びC++の勉強中です。
まだC++はまともに使えないのでクラスの使い方も(VB.NETやC#はともかく)分かりません。
今後の課題としてクラスの勉強を始めようと思います。
そのサイトにも、 >描画の処理を行うとき、必ずBeginPaint()とEndPaint()を使って、描画処理を挟み込む形を取っていましたが、これは必ずそうしなければなりません。 って書いてるじゃん
と思ったら、BitBltのあたりでいきなりはしょってるなw
"Programing"の時点で糞確定だけどな
>>328 hDCはBeginpaintの戻り値かps.hdc 使う
本当の所、BeginPaintを必ず使わなければいけないという決まりはない。 ただ、これ一回の呼び出しで行われる処理内容を考慮すると、使わない理由が無いな。
>>330 それよりお勧めサイト書いてくれたほうがうれしい
338 :
デフォルトの名無しさん :2008/05/24(土) 10:56:51
調べても分からなかったので質問させてください CreateMenuでよくアプリケーション上部にあるFile(F)とか表示(V)のようなメニュー作成しています。 メインウィンドウのサイズを変更したとき、Menuのサイズを変更しないようにしたいです。 メニューの横幅固定で。この場合、メニューサイズを固定するAPIか、メニューの構造体に横幅指定することができるとか 方法がありましたら、ご教示ください。よろしくおねがいします。 環境はVC + SDKです。
無理
ツールバーで代用するとか 苦労の割に見返りがサイズ固定だけって泣けるけど
標準と違う動きをするアプリって違和感があるよね。
342 :
338 :2008/05/24(土) 11:48:09
単刀直入に言うと、ウィンドウサイズ変更時にメニューのちらつきをなくしたいです。 勉強中なので間違ってるかもしれないですが、CreateMenuで作成してもWNDCLASSEXで wc.lpszMenuName=MAKEINTRESOURCE( IDR_MENU);登録にしても、 結局はメインウィンドウの再描画に巻き込まれる形になるので、ちらつきます。 Janeとかのメニューはどうやって実現してるのかなぁ。。
343 :
338 :2008/05/24(土) 12:54:04
もうちょっと考えて見ます お騒がせしました。
>>341 IEのメニューはツールバーで出来てるが
コマンドバーって呼ばれてる
WTLにCCommandBarCtrlってクラスがあるけどこれはバグが多すぎてあまり使えない
>>344 CCommandBarCtrlのバグって例えばどんな?
>>345 とりあえず致命的なのを2点ほど
メニューをクリックするとCommandBarにフォーカスを持って行かれる
→フォーカスを元に状態設定を行っていると正常に機能しなくなる
IEのようなReBar上で右クリックメニューを出すようなのを作っていると
メニューが出ているときにメニュー項目上で右クリックすると落ちることがある
→DoTrackPopupMenuに再入してしまうのが原因なので適当にフラグ立てて回避するしかない
Donut系ブラウザはこの辺のバグを回避するためにCCommandBarCtrlを使っていない
俺もこの辺のバグを回避するためにDonutのソースを参考にして自作した
>>338 >メインウィンドウのサイズを変更したとき、Menuのサイズを変更しない
??
ウインドウを小さくした時メニューがはみ出してもいいの?
変なアプリーw
サイズ固定でシェブロン出すのよくあるけど。
右端に >> を付けたいって事だろ そういうのはコマンドバーって言うんだよっていうのが以後の流れ
APIの話では無いのでスレ違いだと思いますが Windows XPで外部信号に対して±10mS程度以内で 応答を返すことは可能なのでしょうか?
エスパーじゃないしマイナスは厳しいんじゃないか。
え、-10ms以内で応答を返せないの? 近頃のWindowsは糞だなぁ
さすがのWINDOWSでも、時をかけるのは難しいんじゃないか?
待ってられない信号がある。 それはさておき、「何らかのインターネット接続が存在するかどうか」を知る方法はありますか? 今は自分のグローバルIPアドレスに対してpingを打っているのですが、激しく間違っている気がします。
それはすれ違いじゃないか? ネットワーク相談室の方がいい気がする。。
Network Managementで接続を列挙するとか wininetでonline/offlineをとるとか
wininet.dll が使えるなら(というか使えない環境のほうがレアだろうが)、 InternetGetConnectedStateEx だろう。
>>357 インターネット環境が無いと使えない某ソフトが確かそのAPIでチェックしてたような
勿論nopで埋めうわ何をするやmくぁwせdrftgyふじこlp
>>358 日本語でそっち関連の情報を提供してるとこある?
中国語とかならわんさかあるんだけど...
そんな物自分で勉強しろよ スレ違いな上にグレーゾーンな事をここで聞くな馬鹿
>>359 英語を苦にしないならMSDN。
ていうか、なんで日本語版にはwininet関数が載ってないんだ。
昔はWinAPIの日本語ヘルプが付いてたのに、今やWin95時代から更新止まってる古い情報しか無いのはどうよ そもそもMSKBですら最近は機械翻訳だらけだし、中国語とかの方が翻訳されてるなんておかしい もう日本のIT技術者は世界から見捨てられてるという事?
>>350 デバイスドライバならともかく、
一介のアプリケーションで100%確実の保証は絶対無理だな。
>>362 おかげで、英語を読むことの抵抗感がなくなったから感謝しているw
日本のIT技術者はもっと世界に羽ばたけということだよ。
まぁIMEが中国で開発されてるぐらいだから仕方ないか 日本のプログラマはもう用済みなんだろうな
英語も中国語もできる俺は勝ち組。
>>367 すぐにプログラマから足を洗って商売でも始めるんだ。
369 :
350 :2008/05/24(土) 18:41:48
Windows上であるいじょう、確実な保障はできないが、 そのくらいの精度なら、大抵の環境で余裕だろ。
>>369 50±10ms ぐらいなら可能なはず。
Windows のタイマの精度が 16ms ぐらいだから結構ギリだがな。
リアルタイム性を Windows に求めるのは少しつらいかも知れん。
そこでRTLinuxですよ、俺は使ったこと無いけど
374 :
デフォルトの名無しさん :2008/05/24(土) 19:34:05
ダイアログに関する質問です。 SS_BITMAPを指定してスタティックコントロールを作って画像を表示した場合、画像がウィンドウより大きいとはみ出しますが、StretchBlt()のように固定サイズ内での縮小表示は出来ますか。 事前に何処かで縮小処理を行ったビットマップを読むしかないのでしょうか。
>>374 つ SS_REALSIZECONTROL
XP以降でダイアログのビットマップやアイコンが潰れてる元凶
376 :
350 :2008/05/24(土) 19:50:25
やはり10mSの精度は無理っぽいですね。 出来たとしても15mSくらいが限界なんでしょうな。 全然分ってないけど、デバイスドライバーにすればタイムスライスの 壁は越えられるのでしょうか。。
377 :
デフォルトの名無しさん :2008/05/24(土) 19:51:39
>>375 手書きでリソースファイルを修正したら出来ました、ありがとうございます。
ResEdit1.4.3のバグでSS_REALSIZECONTROLをtrueにしてもリソースファイルに反映されないのが原因だったようです。
CreateWindow関数って使われなくなったのですか? 何故か、自動的にCreateWindowExAと解釈されてしまうのですが……。 ちなみに環境はVC++2008ExpOSはXP使ってます。
すみません自己解決しましたorz マクロのコンパイルエラーだった。
>>376 タイムスライスの壁は越えられないこともないが下手な実装だと Windows 全体が不安定になるわな。
デバイス側から割り込みをかけられる機構があるなら手っ取り早い。(割り込みはほぼ最大優先度で処理されるため。)
381 :
デフォルトの名無しさん :2008/05/24(土) 20:51:01
Webダウンローダー等でダウンロードしたファイル名に ?等が入っている場合があるのですが、これは問題ないのですか?
>>381 問題あり
ウイルスに感染していると自動的に?等が入る仕組みなので中身を見る前に捨てましょう
383 :
デフォルトの名無しさん :2008/05/24(土) 21:02:10
>>382 例えば
.cgi?name=abcd等では?
せめてAPIの質問してくれよ
385 :
デフォルトの名無しさん :2008/05/24(土) 21:12:11
>>384 ファイルの新規作成では?使えないのに
CreateFileが?使えるのは何故ですか?
>>376 > Windows XPで外部信号に対して
今実装してる方法では、どうやって信号取得してるの?
もうちょっと話が具体的にならないと、これ以上アドバイスできない。
>>385 Explorerのバグだろ
".htaccess"とかも作成できない
388 :
デフォルトの名無しさん :2008/05/24(土) 21:17:57
>>387 バグですか、
?をファイル名に含むファイルをプログラムが生成する事に何か問題はありますか?
そんな事知るか MSに聞け
390 :
デフォルトの名無しさん :2008/05/24(土) 21:20:20
>>391 以前その記事を見てバグだと確信した
・拡張子を表示しない設定にしていても".txt"のようなファイル名は拡張子含めて表示すればいい
・拡張子を表示する設定にしていれば".txt"のようなファイルを作成できるようにすればいい
・そもそも拡張子を表示しない設定なんて不要 (セキュリティ的に)
選択肢は色々あるし、.htaccessなんて比較的PCに詳しくない人間でも作る時代なのに
Win95以来から今に至るまで放置状態なんて開発者の傲慢だろ
自分でシェル拡張作れとか、もうアホかと
・そもそも拡張子でのファイル識別がアホ
395 :
350 :2008/05/24(土) 21:39:23
>>386 未だ具体的な実装レベルの話にはなっていません。
Windowsで10mS応答は無理(?)なのでリアルタイム処理が必要な
部分は機器側で実装しないと無理〜・・・のような話をしている段階です。
>>394 Macみたいにファイルの先頭にゴミ付けて識別するのもどうかと思う
397 :
デフォルトの名無しさん :2008/05/24(土) 21:41:52
この流れの中で質問するのは恐縮なのですが、「Wininet」を使用したFTP通信で困った状態になっています。 APサーバからファイルサーバ上の複数のFTPサイトに対して、ファイルをFTP PUTするサービスがあるのですが、 特定のFTPサイトだけ「550 access denied」になってしまいます。 ファイルサーバ上のFTPサイトは「書き込み:可」になっていますし、フォルダの権限も同様です。 新規ファイルのPUTなので上書きに失敗している訳でもありません。 使用しているユーザーは共通のものを使っているので、他のFTPサイトにPUTできることから、 権限は足りていると判断しています。でも、アクセス拒否エラーが発生してしまいます。 ファイルサーバを再起動しても改善しません。 このような場合、他にどの点を疑って調査すれば良いでしょうか?
いい加減ファイルシステムにファイルタイプ情報持たせろよ
いまどき拡張子でタイプ判別なんてうんこプログラム書いてる奴はいないだろ…
>>393 いやちょっとまて、一体どこを読んだらそういう解釈になるんだよ。
そりゃまあ、世の中には.htaccessぐらい余裕で書ける婆ちゃんがいるかもしれんさ。
でもな、世の中はそーじゃねーんだよ。
だから一番バカに合わせておくんだ。
間に合わなかったっつーか、Windowsの機能として入れる計画は無くなった。
>>403 バカはPCを使わなくていい
バカに合わせると使いづらくなるだけ
バカは紙と鉛筆で十分
バカにはTablet PCでも与えてとけばおk
カプセルPCでおk
>>405 Windowsのファイルシステム系APIを使うほぼ全てのアプリがそうじゃない?
バイナリフォーマットを扱うアプリであれば、最初に拡張子で選別して、次に中身を見るだろうけど。
(適切かつ安全に見ることができないアプリも多いが)
あ〜もういいや
やいいうも〜あ
あぃいおまぁ
>>398 NTFSなら副次ストリームとか使えるけど、
古いファイルシステムも捨てられない。
Windowsは互換性をけっこう気にするからな。
古いファイルシステムってFATの事を言いたいのか? USBメモリやSD/CFカードではまだまだ現役バリバリだろ
>>378 CreateWindowとCreateWindowExだったら、
どっちでもいいときは好きなほうを使えばいい。
仮に、CreateWindowが実在したとしても、どうせ中でCreateWindowExを呼ぶだけ。
それだったらCreateWindowはヘッダでCreateWindowExに展開する今の方式なら、
システムDLLがCreateWindowの実装を省ける分サイズ削減できる。
>>415 大抵内部で〜Exを呼んでる (LoadLibraryとか)
むしろマクロで済ませてるCreateWindowが特殊
>>395 10mS精度ぐらいならおおむねできるけど、ほかの処理で数百ミリ遅れることは多々ある。だからリアルタイムを現実的に無理。デバイスドライバでも同じ。
でもHALでリアルタイム実行させたり、windowsを仮想化させてリアルタイム実行させるるソフトがあるから、リアルタイムHALやRTXでググってみれれ
>>397 ほかのFTPソフトを使うとそのサイトにはうpできるんんか?
んんか?
できるんんか の検索結果 約 1,850,000 件 w
よく見たら一つ上のレスを真似しただけかな 実行させるるソフト ググってみれれ 今時カナ打ちかよw
かな入力の方が日本語のタイピングは速い。
というのは間違い。
キーをタイプする回数が減るから事実。
かな入力じゃ10分間で5000タッチできる気がしない
それは慣れていないだけ。
まあどうせ俺なんか入力速度に脳が追いつかないからどうでもいいんだけどね
しかし日本語は読みから漢字に変換しなければならないので、 いくら読みがなを早く入力できたからといって、それほど早くはならない気がする。 完璧に変換してくれるIMEは存在しないし。
そこでT-Code
ライターじゃあるまいし日本語のタイピング速度なんてどうでもいいだろ それともひまわりでプログラミングしてるのか?
日本語のレスに対する突っ込みだったから。
>>432 違う。俺はローマ字入力。事実を伝えただけ。スレ違いなので終わる。
なんで怪しい日本語になるダヨ
/* ここまで雑談 */
>>433 431 = 424 = 422;
↑
こうやって反射的にセミコロンを付けてしまう事ってよくあるよねw
437 :
433 :2008/05/25(日) 13:19:53
もういいから
こういう空気読めない奴ってホントどこにでもいるな リアルでも空気読めなくて周囲からウザく思われてるんだろうな
質問がないと暇を持て余すんだろう 質問来ても、その調子なら邪魔以外の何者でもないが・・・
int 21Hとか割り込み命令って今でも使える? Win32API使わないとだめ?
443 :
デフォルトの名無しさん :2008/05/25(日) 17:05:30
試せば分かるだろ
>>442 DOSアプリからなら使えるよ。32ビットアプリだとクラッシュ。
9x系だと確か一部のものはクラッシュしなかったような?
動かないだろうけど
>>444 DOSアプリのみということは、
Win32 コンソールアプリではだめなのか
なるほど
Invalid icon format ってエラーが出るんですけど、アイコンの絵そのものが 問題あるってことですよね?XPのペイントで書いてみたのが問題ですか?
アイコンって、大きさ正方形だったかサイズ固定だったか 決まりがあったような気がする。
>>447 icon≠windows bitmap
そもそもフォーマットが違います
アイコンエディタを使いましょう
>>448 それはgoogle検索で出てきたので、32×32にしてます。
>>449 そうなんですか、分かりました。
皆さんありがとうございました。
そういえばVistaのPNG形式アイコンがあるとRC.EXEがエラー吐いたりしたけど 最近のバージョンのRC.EXEでは直ってるの?
>>444 9xで、32ビットアプリケーションからファンクションコールをするとしたら、
DeviceIoControlを呼ぶのが正式な手段。全部使えるわけではないけど、
ディスクを直接読み書きするときとかに使った。
9xの話を今頃されてもオッサン乙で終わるのだが
454 :
デフォルトの名無しさん :2008/05/26(月) 00:19:42
ウィンドウプロシージャを差し替えたいんだけど、 なんかできないんだよね。 SetClassLong(hWnd, GCL_WNDPROC, (LONG)AnotherMyWindowProc); この関数を用いる上でなんか注意点ある? マウスやアプリのアイコン変更も反映されないんだけど。
注意点 msdnをよく読む事
>>453 そのオッサンのやりとりにお前が絡む必要はないのに、何が乙なんだ
俺の家の玄関に「硫化水素発生中」って貼った奴、氏ねよ
そのネタはもう旬を過ぎてるよ
まじでか
わらっつぁらめぇー
462 :
454 :2008/05/26(月) 01:24:30
とってもよかったでーす^^^;
>>462 赤字で書いてるとこと違う事をしてるのは、分かっててやってるの?
変更したクラスから新しくウィンドウを作るってんなら、それでいいんだけど。
どこをどう見ると間違ってないんだよw SetWindowLong、SetWindowLongPtr、SetWindowSubclass使えよ
間違い探しかよw ぱっと見てスルーしてたけど、SetClassLong使ってたのか
>>451 VS2005なら、Windows SDK6.0だか6.1入れてCLやRCをそちら付属品を
使うようにすればVista圧縮形式に対応できる。
VS2008はRCでもMSDEVリソースエディタでも標準サポート
>>452 9xだと本当にDOSが動いてるからね。
NTだと単なるエミュだし
>>468 さんくす
RC.EXEだけでも入れ替えておけばビルド後のイベントでゴニョゴニョする必要は無さそうだw
IDEのリソースエディタでアイコンなんて作らないからそっちはまぁいいや
>>470 VS2005だと、圧縮形式アイコンが含まれる.rcファイルがMSDEVで開けないんで注意
VC2005はmsdevじゃなくてdevenvだったと思うが。 そんな俺はVC6ユーザー
言い忘れました。×ボタンです。
クローズボタンのことが聞きたいのかオーナードローのボタンのことが聞きたいのか
1. Toolbar を作る 2. ImageList を作る 3. [×] のビットマップを作る 4. 3. のビットマップを 2. の ImageList に追加する 5. ImageList を Toolbar にセットする 6. Toolbar に 3. のビットマップを持つボタンを追加する
477 :
デフォルトの名無しさん :2008/05/26(月) 18:08:23
指定したiniファイルのキーを削除するapiを教えてください
やだ
WritePrivateProfileStringで lpAppNameにセクション名 lpKeyNameにキー名 lpStringにNULL lpFileNameにiniファイルのパスを指定すると 指定したセクション内のキーが消える
>>479 まじっすか^^
WritePrivateProfileStringで値をNULLにすると消えるんですね
これは知らなかった。ありがとうございます!
481 :
479 :2008/05/26(月) 19:04:52
ってかMSDN読めよ
MSDNも読まずにWin32APIを使おうとする奴の気が知れない
つーか引数どうやって知ったのかw そこに説明もあると思うんだがなあ
MSDNなんて読まなくていい ここで質問するだけで丁寧な解説が日本語で得られる お人好しな人間ほどうまく扱えば便利なものは無い というのが俺の妄想 一応言っとくが俺はちゃんとMSDNで調べる派だからな
俺みたいに嘘を教える奴も居るから気をつけないと
俺みたいにかく乱する奴もいるからry
お前ら必死でワロタ
VC.net2003 + SDKで、ImageList使える? ビルドは通るが、CreateWindowExでウィンドウ作成した時点で、'hoge, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' から 型 '_IMAGELIST' を読み込めません。って出て落ちるんだけど・・・
DiskcopyコマンドってどういうAPI使ってフロッピーに出力してるの? このコマンドに限らずブート領域を書き込めるのって同じやり方だと思うんだけぢ 少なくともfoutやCopyFileではなさそう。
> 思うんだけぢ どこの方言でぢか?
アマゾン地方の方言が出てしまいました
DeviceIoControlとかじゃないの 知らんけど
やだ
>>489 NTならCreateFileで"\\\\.\\A:"のようにすると生のドライブを開ける。SDKにも書いてある。
9xなら
>>452 。KB125712やKB174569など。
あした試してみよう
もうすぐ明日だろ
関数を動的に作ってウィンドウプロシージャとして渡す事ってできないんですか? クラスのメンバ関数をウィンドウプロシージャにできないのが、 理屈ではよくわかるんですけど、なんか納得できなくてw static使って場合分けするのもなんか反則的というか、やりたいことと違う気がして… クラスのコンストラクタで関数を動的に作ってコントロールのプロシージャとして使い、 デストラクタでコントロールは期すると共に関数も破棄できないかなぁと。 …ゴメンナサイ、なんかもう投げやりです。
グローバル関数でのプロシージャで 各クラス内の自作プロシージャにそれぞれ処理を割り振ったりすれば良いんじゃない?
つーか自分でラッパー書けばいいだけじゃね
僕ハッカー!!!
502 :
489 :2008/05/27(火) 00:11:11
CreateFile DeviceIoControl WriteFile でなんかフロッピーに出してるのは判った しかしこの方法でフロッピーの中にファイルを作る方法がわからなう
FAT32の仕組みでも覚えろ
>>502 逆に、ファイルがある状態のフロッピーディスクを
吸い出して中身を眺める、もちろんFATの構造の解説と一緒に。
アプリケーションへのアイコン設定は、 検索で調べると必ず .rc への記述方法が紹介されてますが、 .rc を経由せずに .cpp のプログラムのみで設定って出来るんでしょうか? よろしくお願い致します。
>>502 何がしたいのかよくわからんが
フロッピーの中にファイルを作るのならばCreateFileでいいと思うが。
diskcopyだったらセクタを全部コピーすればいい
あるウィンドウがHWND_TOPMOSTで最善面になっているかどうかを判断するにはどうすればいいのでしょうか?
GetWindowLong(hwnd, GWL_EXSTYLE) & WS_EX_TOPMOST
>>504 atlthunk.cppが凄い
てかこんなのMSの中の人でないと書けないだろw
書ける奴はいくらでもいるだろうが、実際に、書こう思う奴は、それほどいない。 MFCはHWNDとベースクラスへのポインタを、 いわば、std::map< HWND, Hoge >的なもので管理していて、メッセージが来るたびに検索してると聞いたが。
コード生成はWindowsより前なら常套手段だから昔の人なら楽勝
そんな話はしていない いいから当該ソースを見ろ
WinMainからDialogBoxでモーダルダイアログを作成しております。 DialogProc内から例外をthrow(あるいはRaiseException)したところ、 WinMainで正常にcatch出来ました。 ところがDialogProcからさらに孫ダイアログを作成し、 孫ダイアログのDialogProc内から例外をthrowしたところ、 子ダイアログのDialogProcでcatch出来たのですが、 return後にAccess violationで落ちてしまいました。 どうすればreturn後に処理を続行できるのでしょうか?
長くて恐縮ですがソースを貼らせて頂きます。 INT_PTR CALLBACK proc2(HWND wnd, UINT msg, WPARAM w, LPARAM) { switch (msg) { case WM_INITDIALOG: return TRUE; case WM_COMMAND: switch (LOWORD(w)) { case IDOK: EndDialog(wnd, LOWORD(w)); throw std::exception("HOGE!"); // 例外をthrow case IDCANCEL: EndDialog(wnd, LOWORD(w)); return TRUE; } break; } return FALSE; } INT_PTR CALLBACK proc1(HWND wnd, UINT msg, WPARAM w, LPARAM) { switch (msg) { case WM_INITDIALOG: return TRUE; case WM_COMMAND: switch (LOWORD(w)) { case IDOK: try { DialogBox(GetModuleHandle(0), MAKEINTRESOURCE(IDD_2), wnd, proc2); } catch (const std::exception&) {} return TRUE; // return後にAccess violation case IDCANCEL: EndDialog(wnd, LOWORD(w)); return TRUE; } break; } return FALSE; } int WINAPI _tWinMain(HINSTANCE, HINSTANCE, LPSTR, int) { try { DialogBox(GetModuleHandle(0), MAKEINTRESOURCE(IDD_1), 0, proc1); } catch (const std::exception&) { } catch (...) {} return 0; }
>>515 C++以外のスタックフレームを飛び越えるthrow〜catchって
頭の悪いlongjmpと同じだと思うがどうか
文字列の"123.45"をfloatに変換するAPIを教えてくだせえ
なんでわざわざAPI使うん?
wsprinf があるんだから wsscanf もあるにちがいないw
atofの返値がfloatじゃなくてdoubleだからって言いそうな気がする。
いやdoubleでもいいからさっさと教えろよ どうせ知らないだろーけど
VarR4FromStr VarR8FromStr
>>520 wsscanfならMSのFTP鯖にソースが置いてある
Win16時代の物みたいだから今でも使えるかどうかは知らん
crtdll.dllからscanfをインポートして使う・・・ってのはAPIの範疇というと苦しいか?
msvcrt.dllならいいんじゃね
crtdllとかmsvcrtにあるprintfとかscanfって_stdcallじゃなくて_cdeclでいいんだよね?
wsprintfもcdeclだろ 可変長なのにどうやって呼び出し先でスタックポインタを戻せるんだよ
うるせークズ
530 :
デフォルトの名無しさん :2008/05/27(火) 15:13:58
可変長のはともかく、strcpyとかもCDECLでいいんだろうか?
試せばいいだろハゲ
そんなの関係ねーだろクズが
関係ねー事聞くなカス
ノ (゚Д゚) ( (7 < ヽ
>>531 みたいなのは実際試した場合間違っていても動いちゃうから困りもの
>>536 デバッグビルドなら呼び出し後にchkstkでESPがチェックされるから大抵気付く
FindWindow関数によってハンドルを調べたウィンドウを強制的に移動させるにはどうしたらよいでしょうか。 SendMessage関数でWM_MOVEを送っても移動しないことがあります。
WM_MOVEは動いた後に送られてくるメッセージなのに それで動くウインドウがあるのか?
正しくはどのメッセージを送ればよいのでしょうか?
ありがとうございます。
SetWindowPosとかもあるし、好きなので。
>>540 WM_SIZEを送ると動くウィンドウならあるよ
動かないウィンドウもあるってことですね。
>>517 遅レスすいません。
プロシージャ内で気軽にSTLなどを使いたかったのですが、邪道だったでしょうか・・・。
とりあえずプロシージャをreturnする前に全てcatchする方向で再考してみます。
STLが○| ̄|_にみえたのは俺だけですか?
確かDispatchMessageを例外捕捉しとくとウィンドウ内部の例外が捕まえられたような
そもそもAPIから呼ばれるコールバック関数内で例外を投げるなんてアホとしか思えない
>>550 VC++ではC++例外を構造化例外で実装してるようだから捕まえられるかもしれないけど
C++言語的には未定義動作だからやめた方がいい
未定義とか不定とかどうでもいい 今時VC++以外でWin32開発してる奴の方が悪い
VCなんてもう終わってるだろうがw
終わってません というか終わりません
MSではVBについで売れてる言語製品だしな
でも、そのVB6も来月で...
何その時代錯誤
俺も516みたいにWinMainにcatch書くことはあるけど、 その場合はエラーログ書いたりメッセージ出したりして、 とっととExitProcessするだけだな。
VBwwwwwwwwwwwwwwwwwwwwww
Visual Baka
violence bokan
>>564 C、C++に挫折した馬鹿しか使わない言語という事ですね?
567 :
デフォルトの名無しさん :2008/05/28(水) 20:34:14
int wmain() { HMODULE hModule; HBITMAP hBitmap; int count = 0; std::wcout.imbue(std::locale("japanese")); while (1) { hModule = LoadLibrary(L"hoge.exe"); //単一で数MBのBMPリソースのあるファイル hBitmap = LoadBitmap((HINSTANCE)hModule, L"#200"); //そのリソース番号 if (!hBitmap) { FreeLibrary(hModule); std::wcout << L"画像読み込み失敗" << std::endl; return 1; } FreeLibrary(hModule); count++; std::cout << count << std::endl; } return 0; } 大した回数(自分の環境では45回)も行かない内に画像リソースの読み込みに失敗します。 原因は何でしょうか。 環境はWinXP Home SP3、VC++2008EEです。 上記はあくまで耐久テスト用ですが、実際のソフトも仕様上ファイルのロード→アンロード回数は予測出来ません。
>>567 MSDNライブラリでLoadBitmap引いたらちゃんと注意書きがあるから嫁。
>>567 DeleteObject(hBitmap)してないからでは?
NT系ならDeleteObjectしなくても約10000回Loadできるはずだが
なんでできるの?画像がたとえば4MBだとして、500も読めば アプリの仮想アドレス空間が枯渇するぜ?
外からウィンドウ内にカーソルを持って来ると、大きさ変更するときの ←→ の 形のままで普通のカーソルの形に戻りません。 CreateWindowEx、WS_OVERLAPPEDWINDOW 以外に何かいるんですか?
GetWindowLong, SetWindowPos 等で失敗すると 0 が返る関数は 製作者が引数に渡す値をしくじった時に失敗するのは当然ですが 絶対に動作するはずの引数で、OSが何かしらの問題で失敗する事ってありますか? 他人が書かれているコードを見ても、成功する事が前提で書かれているものばかりで問題ないのか疑問です このような関数が失敗する時は、OSが動いているのも不思議なくらいの状態で いつOSが止まってもおかしくない状況なので アプリケーションで取得できなかった値を使用して不具合が出るよりOSの方が重症なのでエラーチェックを行っていないという事なのでしょうか? 誰か詳しい方 教えてください
574 :
567 :2008/05/28(水) 21:33:00
回答ありがとうございます。 耐久テストのコードではその方法で解決しました。 実際のコードはhBitmapをウィンドウプロシージャのスタティックなローカル変数として宣言し、メッセージ処理先(LBN_SELCHANGE)で画像リソースを呼び出しています。 これを止めてメッセージの処理先で static HBITMAP hBitmap; と宣言したら以下のコンパイルエラーが出てしまい、どうにも出来ません。 error C2065: 'hBitmap' : 定義されていない識別子です。
>>572 WNDCLASS の hCursor にカーソルを設定する
あるいは WM_SETCURSOR メッセージで SetCursor を呼びカーソルを設定する
>>574 Win32API以前の問題だ。
自分でなんとかしろ。
>>577 ダイアログに画像を表示したらDeleteObject()しても良かったんですね…。
VB.NETで同じようなコードをBitmapオブジェクトで行ったらエラーが出たのでWin32APIでもそうだと勘違いしていました。
C++でGUIアプリを作り始めてまだ1週間ですが、少し背伸びし過ぎました。
C言語すら禄に理解してない癖に何が耐久テストだよ
なんだVisual Bakaプログラマだったのかw
いやです
それぐらいしか楽しみがないんだろうから許してやってもいいんじゃ
つうか罵られるのが嫌なら2ちゃんで質問しなければいいのでは
当事者以外にも罵り文を見て不快に思う人がいるだろう
不快に思うのが嫌なら2ちゃんに来なければいいのでは
次にお前は「そんな奴が2ちゃん見るなよ」と言う。 って書こうと思ったのに
MSDNすら読まずに質問する奴なんて叩かれて当然
○○が嫌なら××しなければいいだろう この言葉だけでは解決できない事がどれだけ溢れてると思ってるんだ
>>588 なら「MSDN読め」でいい、独り言を言うように罵り煽る奴はいらん
それくらい察して欲しかったって言うのが本音。
話を理解してない馬鹿は知らないならそれぐらい察してレスしないでMSDN読んでほしかったってのが本音
VBwwwwwwwwwwwwwwwwwwwwww
595 :
デフォルトの名無しさん :2008/05/29(木) 08:10:11
複数スレッドから参照されるキューへの出入力で排他処理を行いたいのですが、 カウンタ1の無名セマフォとクリティカルセクションではどちらの使用が適切なのでしょうか?
クリティカルセクション
このスレの住人ってVBプログラマいないの? まあVBだとネイティブなAPI使わない事が 多いだろうから少ないかもね
ドットロネットロに移行してるだろうし
Virtual Batouスレですね
601 :
498 :2008/05/29(木) 13:22:09
>>504 質問しといて、亀でゴメンナサイ…
やはりキーとなるデータ使ってマップみたいなことするのが一般的なんですね…
…動的に関数作れるのならちょっと試してみます
ありがとうございました。
マップつっても二分探索なら大して負荷にならんだろ
おまんこ
んがくく
画面を分割してそれぞれに違うものを表示するのは子ウィンドウを使っているのですか? 例えばIEだと、HPを表示する部分とお気に入り・履歴などが分かれていますが、あれも子ウィンドウを使っているのでしょうか?
>>605 そうだと思うよ。
SPYとかで調べてみたらいいんじゃないかな。
607 :
605 :2008/05/29(木) 22:13:08
>>606 SPYを使えばそういうことまで分かるのですか
ダウンロードしてみようと思います
ありがとうございました
Spy++ってタダで入手できたか? てか、今やWin32/C++使いから見ると商用版VisualStudioの価値って リソースエディタとCRT/ATL/MFCのソースコードとSpy++ぐらいなんだよなー
SDKのUISpyでも十分目的は果たせると思うお
フリーソフトでスパイよりいいのあるお
Spy++の代わりにフリーソフト使ったら負けかなと思ってる
Winspactor Spy使ってる
Winsp「e」ctorだろう
昔のPlatform SDKにサンプルとしてSpyってのがあったんだけどな。 ソース付きで、Spy++のちょっとショボくなったやつ。 今はそういうサンプル全部無くなってるな。
>>614 あれ、ちょっとどころか相当ショボイだろ
URL忘れたけど、MSサイトのどこかに
解凍すると130MBのchmが出てきて大量にSDKサンプルの入ってるやつがあった
その中におまいさんの言ってるSpyのソースコードも入ってるよ
そんなにショボかったかw 見たの10年くらい前だから、もうよく覚えてないな。
現役大学生か。若いな。
spyそのものはspy++が出るまでSDKの普通のツールだったしな
620 :
デフォルトの名無しさん :2008/05/30(金) 08:56:51
MIIM_CHECKMARKS の MIIMって何の略ですか? Menu* だとは思うのですが.
MenuItemInfoMask
int main(int argc, char *argv[]) コンソールアプリだとこれで引数渡せるけど int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) APIじゃこう宣言されてるよね 非コンソールアプリを実行する時に プログラム名 -オプション ってやるにはどうすればいい?
>>615 探したけどみつからないお><
もうなくなちゃったのかな?
GetCommandLine
__argcと__argv
ついでにUnicodeであればlpCmdLineをCommandLineToArgvWに通すとLPWSTRの配列に分解してくれる
>>619 VC2の頃なんか普通にあったなSpy。アイコンもスパイ風の男で、VC4だかの初代Spy++は
そのアイコンに++の絵が付いただけ。
というかSpyの強化版だから「Spy++」になったわけだし
次のバージョンではSpy#になるんですね。わかります。
その次はSpy.NETになるんですね。わかります。
Spy.NETってもうなかったっけ?
ウィンドウで Set/GetWindowLongがあるように スレッドとかプロセス別に値収納する奴ってありますか?
>>633 スレッドはスレッドローカルストレージってやつでスレッド固有の値を保持できるよ。詳細はmsdnみろ
プロセスは普通にグローバル変数使えばいいんでは…?
Get/SetLastErrorを使うとスレッド別に32bitの値を格納できる
スレッドならTLSを使う。 プロセスについては、自分以外のプロセスを管理する上でそれぞれに値を割り当てたいなら、 HPROCESS取得・VirtualAllocExで確保してRead/WriteProcessMemoryでアクセスという手はある。 用途が全く見えないが。
HPROCESS HPROCESS HPROCESS
ダイアログに追加したステータスバーにツールチップを表示したくてSBT_TOOLTIPSを指定して作成しました。 ディスプレイの水平解像度を超える長い文字列を表示するとツールチップがはみ出してしまいます。 これを折り返す方法はないのでしょうか。 SendDlgItemMessage(hDlg, IDC_STAT1, TTM_SETMAXTIPWIDTH, 0, (LPARAM)(int)320); などとしても駄目でした。
確かこうやる RECT rc; SystemParametersInfo(SPI_GETWORKAREA, 0, &rc, 0); SendMessage(hToolTip, TTM_SETMAXTIPWIDTH, 0, rc.right - rc.left);
>>639 試してみましたが駄目でした。
ステータスバーに初めから備わったツールチップ機能を使用しているので、独自にツールチップをCreateWindowEx()している訳ではありません。
VB.NETやC#に例えるなら以下のプロパティを設定した場合とほぼ同じです。
これらの言語では特に何もしなくても折り返し表示されました。
ToolStatusStripLabel1.AutoToolTip = False
ToolStatusStripLabel1.ToolTipText = "表示する内容"
VB.NETやC#の宣伝がしたいなら余所へどうぞ そもそもステータスバーにそんな長いツールチップを出すのがUIとして間違い とは言え ToolStripとその派生コンポーネントって便利杉だよなー まぁ.NET2.0のウリだったからな
ToolStripをパクったクラスをC++で作ればいいじゃない
ブビ厨がそんなの作れる訳ないじゃんw
メニューのRebar化ってどうやってやるのかなと思って、 WTLのソース覗いてみたら、5000行近くあって吹いた。
メニューのレバー化、俺も考えたけど、メニューをツールバー化しないと無理っぽいし。あきらめたわ ツールバー化したら、メニュー文字間隔が変だし。どうにかしてメニューをレバーに突っ込めないかな
だからレバーじゃなくてリバーだと(ry つうかReBar化って何だよ ReBarに入れるって意味ならそう言え
>>644 WTLのはメニュー項目にアイコン付ける為のオーナードロー込みだからデカいだけ
純粋にCommandBarだけなら2000行ぐらいだ
648 :
↑ :2008/05/31(土) 05:22:46
最も無意味なカキコの例
妄言吐くだけのキモイ奴が多すぎ
煽りいれる奴は、かまってちゃんだから相手にしない方がいいよ
わかってるよ 俺もかまってちゃんなんだよ
かまってちゃんだから2ちゃんねらなんだよ
質問内容も馬鹿丸出しだし、レバーなんていう人にはロクなのがいないね。
訳:かまってほしいな
もっとかまってよー
657は食い物のことを言ってるんだと思った。
メニューの肝臓化
キモ
リバーでもレバーでもどっちでもいいよ。 そんなの見たことも聞いたこともないから。 なにみんな脳内妄想語ってるの?ってカンジ?みたいな〜。
だって脳内妄想を語るスレじゃん?ってカンジ?みたいな〜。
またレバーリバーの言葉遊びで100レス消費するつもりか? 頭悪い奴が増えたな
ビルゲイツ氏ね
不毛な論争で無駄なレスを消費しないよう今後は以下のカタカナ表記で統一しましょう。 (出来る限り英語の発音に合わせたため一般的なカタカナ語とは表記に違いがあります) Common Control カムン ケントロウル Button バテン Static ステァティク Edit エディト ListBox リスト バクス ComboBox カンボゥ バクス ScrollBar スクロウル バー Toolbar トゥール バー Status Bar ステイテス バー TrackBar トラェック バー Progress Bar プラグレス バー TreeView トゥリーヴュー ListView リストヴュー HotKey ハット キー Header ヘダー Tab テァブ Animate エァネメイト ToolTip トゥール ティプ Month Picker マンス ピカー DateTime Picker デイト タイム ピカー ReBar リバー UpDown アプ ダウン Pager ペイヂア Native Font ネイティヴ ファント Chevron シェヴラン ImageList イミヂ リスト
いやいや違うな Common Control カマン カンチョロォ Button バトゥン とかの方が正確だろ
Button バラゥン の方が正確かも
不覚にもwww
リソース外のbmpやjpeg等の画像を読み込むAPIがあれば教えてください
GDI+ OleLoadPicture IImgCtx
もう発音記号でいいよ
国際音声記号でいいよ
発音する訳じゃないんだから、普通に英語表記でいいだろwww
カマン コンチュロゥルについてなのですが、コマンドゥバァをSDKで使うサンプルないのでしょうか? ネッツで調べても見つからなくて
英語でおk
×サンプル ○サンポゥ
katakana yamete eigoni sitara?
sorya ro-maji yanke
muri iwanaide kudasai ><
yominikuidesu ><
omaera omoroi
nanda kono nagare
fudan doori jan
GetProcessHeap tte NULL ga kaettekuruktoaruno?
aruyo
691 :
689 :2008/06/01(日) 03:02:16
>>690 kaette kitakoto naindaga
maa hinnpannnitukaumonojanaikara doudemoiika
おまえらローマ字とか恥ずかしいからやめてくれ
ryoukai
I don't give a FUCK!!
nani konosure
英語の出来ない人が似非英語を書いたりローマ字書いたりするだけの悲しいスレ
detteiu
>>701 [明白了] chugoku go desu yo
bokuhacker!
moudameda
romaji no dekinai hito ga, ese-chuugokugo wo kaitari nihongo kaitari surudakeno kanashii sure.
>>706 abusett teno's anu cincit unegun sent skipet?
明日まで書込み禁止
jichichuu otsu
いい加減にしろ
naniwo?
業とらしく言うんじゃねーよクソカス 黙れないなら死ね
hate?
ahosuguru
yaku : kamatte hoshiina
いいから黙れ ローマ字で会話するのを止めろ
OK
nande sonnnani hitoni meirei shitagaruno?
souda, kaiwa suruna to iwaretakara, kaiwa wo naritatasenakereba iinda.
スレと関係ない話題をいつまでも引っ張ってるからだクソガキ
yaku : kamatte hoshiina
超伸びてると思ったら何この流れ。
日本語でおk
irassyai isshoni asobo-
ここまで俺の自演。
いいや俺だ。
nani ka shitumon ga areba moto no nagare ni modoru yo son-nani kakka sinai hou ga ii to omou na
久しぶりに基地害を見た。
毎日くれば毎日見られるよ
これやってるの一人か二人なんだろうな。そろそろ通報しとくか。
なんでWin32APIスレだけこんなに荒れるの?
普段、話についてこれないやつが初めて自分のローマ字を披露できたんだ。見守ってやれ
つーかなんでこの板IDないの?
そのように設定していないから。
今日はここに沸いてたのか
毎日ここに沸いてるよ
737 :
682 :2008/06/01(日) 15:43:35
こんな事になるとは思わなかった スマソ
738 :
デフォルトの名無しさん :2008/06/01(日) 16:00:04
ごみレスだらけだよ
>>740 win32APIスレに居て欲しいタイプじゃないから、別スレに移動してくれませんか?
>>737 言葉の揚げ足取ってうれしがる奴は邪魔。
もうこないでほしい
あなた好みのタイプなんて知ったことじゃありません
相手にされてうれしがってるだけなんだから、もう相手するのやめようよ。
↑一番相手にするタイプ
683から736は俺じゃないんだがな
ほら早速。
DVDとかCDをフォーマットするには何て関数使えばいい?
見てる側からすれば変な発言にノッタお前らも邪魔なんだけどな 煽る奴も邪魔 スルー覚えろよ
>スルー覚えろよ そういうあなたがスルーを覚えられていないようなので スルーを覚えるつもりはありません。
} while (1);
do { が見つからないんだが
} while (1);
質問があるんですが、なんか変な流れみたいなので自重しときます。
同じく質問があるんですが、なんか変な流れみたいなので自重しときます。
コマンドバーのSDKサンプルあるとこ教えてください 海外サイトでもおk
>>757 いい加減しつこい
MSDNに説明があるだろうが
あれ読んで分からなかったら猫の糞サンプルでも見て勝手にやってろ
>>738 ,739-740
ワロスwwwwwwwwwwwww
スルーしろよ ←今まで我慢してた奴 そういうお前がな ←顔真っ赤な奴 ↑お前もな ←呆れた奴 無限ループになるし終われw
この手の無限ループは荒らしてる基地外が飽きて沈静化するまで終わらないよ
前から言われてるけどID制して欲しいですね。
どうせID変えまくって荒らすだけだろ
荒らす奴はIDの変え方知らんと思うが
ほとんどはID変えてまではしないよ、特にこの板ではありえないそう 同じIDのままならNGで終了だし
質問とか答えるときもあった方が便利そうだけどな
ハンドルっていうのはポインタと思っとけばいいですか
よくないです
ポインタのポインタに近いかも
質問です 掲示板とかによくあるIDの変え方を教えてください
名前欄に fushianasan といれる
これでいいですか?
今すごい自演を見た
fusianasanの場合は文字がもう少し細くなるからバレバレ
>>767 ハンドルというのは、中身を意識してはいけないもの。
操作対象のオブジェクトを一意に識別する単なるID。
ハンドル インターネットでいうとIPアドレス 学校でいうと何年何組何番とか
>>776 何年何組何番は時とともに変化するから学籍番号のほうが的確かと。
ハンドルでわからないアホはプログラム作らなくていいよ
車に乗るとき握るものですね、わかります
50セントじゃねーの?
ステアリングじゃないの?
はいはいそこまで
object identifierとでも言っておけばいいのに 何でハンドルって言うようになったんだ。
なんで初心者って、そういうどうでもいい所が気になるのかねぇ 「適当な固有の値」ぐらいに思ってればいいじゃないの
ただの興味本位です。スレ違い失敬。
新人に聞かれて答えられなかったらカッコ悪いじゃないか
お前に聞く新人なんて誰もいないから心配しなくていいよ
いいぞお前ら もっとやれ
とても質問できるような環境じゃないな・・・
質問です 基地外を消去するAPIを教えてください
( ´∀`)<ぬるぽ
ビットマップを直接弄りたいので、 今までCreateCompatibleBitmapで書いていたコードをCreateDIBSectionで作り変えたら、 今まで精々数%しかCPU食っていなかったのに、数十%もCPUを食うようになってしまいました。 CreateDIBSectionで吐き出されたHBITMAPを使って描画するのは、重い処理なのでしょうか。 教えてください。
DIBとDDBの違いについて調べろ
今更Win32APIw
今でもWin32APIw
今こそWin32APIw
荒らしはwin32API質問箱をなくそうとしてるのか。ひどいな
ひどいね
>>792 CreateCompatibleBitmapは内部でVRAMにメモリを確保してる
CreateDIBSectionはシステムメモリに確保してる
あとは調べれ
VISTA未満の話だけどね
>CreateCompatibleBitmapは内部でVRAMにメモリを確保してる そういう嘘を堂々と書かないように
訳:かまってほしいな
XP以前でVRAM上に確保されるかどうかはドライバ依存 Vista以降ではドライバに依存しなくなった
ATI系のボードはXPでもそういうの遅くなったんだっけ?
どうでもいいよ DDB → VRAMに確保 DIB → システムメモリに確保 ATIとかVistaとかそんな少数派は無視でおk
やっぱりIDが欲しいな
知らないならレスしないでください。
知っているのに知らん振り〜
ID欲しいというのは大概自演荒らし本人 セキュ板がまさにそれ
810 :
デフォルトの名無しさん :2008/06/02(月) 15:28:24
画面上の任意の色(白)を変える方法ってないですか? 試しに半透明ウィンドウを被せてみたら文字がかすんで使えません。 背景色を変更できないページやフリーソフトはまぶしくてしょうがないです
説得力のない大概だな
モニターのコントラストとか輝度を調整してみては
>背景色を変更できないページ つ ユーザーCSS >背景色を変更できないフリーソフト 配色の設定(COLOR_WINDOWとか)に基づいていない糞フトなんて 作者に文句言って修正してもらうか使わなければいいのでは ってか、最近の液晶って輝度が高すぎなんだよな モニターの設定で最も暗くしてもまだ眩しかったりするし
>>813 いいえ、液晶は発光しませんから。
バックライトが眩しいのは、劣化で暗くなることを想定して明る過ぎる光源を使っているからですね。
815 :
810 :2008/06/02(月) 16:12:58
>>812 まぶしくない程度に下げると他が暗くなりすぎたりとなかなか難しいですが
ちょっと調整してみました。どうもでした
>>813 一応設定はしているんですが、変更を受け付けないページやpdfなんかが
目下最大の敵です。
暗くすると色諧調が失われる糞モニタなら捨てたほうがいい。 その辺でグレースケールでも拾ってきて調べてみるといい。
↑話を理解してない馬鹿
知らないならレスするなよクズ
>>810 まさがグレーの半透明被せてないか?
たぶん純黒で不透明度低めのウィンドウを被せれば文字もくっきりするよ
822 :
810 :2008/06/03(火) 00:18:58
>>821 はい、グレーのやつでした。さっそく試してみます。
やはり半透明ウィンドウでやるのがよさげなようですね。
ありがとうございました。そしてお騒がせしました
ディスプレイドライバに輝度やガンマ調整機能とか無いの? 俺のPCは少数派(笑)のATIだけどドライバの設定でそういう調節ができる。
SendMessageとかでメッセージ送れますけど 必ず届くのでしょうか?・・・不安で不安で・・・ 共有メモリとかファイル化して渡した方が良いでしょうか?
何を渡したいかで決めようぜ
ack貰えばいいじゃん
SendMessageだと相手のメッセージループに割り込みが入るから大体届くんじゃねーの ハングしてるスレッドにSendMessage投げてごらん? 投げた側もハングするから。
じゃあこうしよう お前たちのような蛆虫はレスするなってことで
SendMessageCallbackやSendMessageTimeoutを使えば対象ウィンドウが応答したかは解るよ。 エラー時にはちゃんとGetLastErrorの値も見るように。
HWND hwnd = FindWindow( ... ); // この間にhwndがDestroyされると届かなくなるので必ず届くなんて不可能 SendMessage( hwnd, ... ); 昔9x使ってたら、DestroyしたHWNDが割と近い時間で他のウィンドウに使用されて困ったことがあったけど NTだと確か上位16ビットが再利用カウンタだからそういう衝突は無いかな
初めて聞いたぞそれ
あっそ
でっていうwwwwwwwwwwww
834 :
デフォルトの名無しさん :2008/06/03(火) 21:30:08
SendMessageした先からSendMessageで返事を返してもらう、って出来る?
スレッドが違う前提の話だよな。 SendMessageをもらって、ウインドウプロシージャが走ってから そいつが返事をSendMessageするまでの間に、 ReplyMessageしとけばいけるんでない。
SendMessageを投げあってデッドロック!!!マジカッコイイ!!!
SendMessageへの返事は返値でしなさいよw
SendMessageは同期させたいときに使う。
>>149 >フォーカスを失っても青のままにしたい
subclass化して WM_KILLFOCUS をブロック
>>830 >>835 大丈夫。SendMessageの戻り待ちで止まっているスレッドのウィンドウへSendMessageが送られると、
Windowsが直接ウィンドウプロシージャを呼び出す。
Advanced Windows辺りに書いてあったはず。
質問です。 BitBltでビットマップの転送を行うとして、、 転送先のビットマップの大きさの範囲を超えるように引数を指定した場合、 この動作の定義はどうなっているのでしょうか? はみ出たところにあったデータが壊れる心配はないのでしょうか?
843 :
841 :2008/06/04(水) 04:29:13
>>842 これで心置きなく転送できます。
ありがとうございました。
844 :
デフォルトの名無しさん :2008/06/04(水) 16:32:06
簡易的なタブエディタを作っているのですが テキストは開いた順に配列に入れて、たとえば2番目のタブを選択したら 配列の2番目から取り出して表示するという方法でいいんですか?
そんなもん貴方がどう実装したいのかによるでしょ メモリ食ってもいいのか、なるべく食わない方がいいのかとか つかAPI関係ないだろ
846 :
デフォルトの名無しさん :2008/06/04(水) 16:36:52
よくわからんけどいいよ
タブエディタが何か分からない
848 :
デフォルトの名無しさん :2008/06/04(水) 16:46:36
タブ譜のエディタですね、分かります
つまんね
訳:かまってほしいな
852 :
844 :2008/06/04(水) 17:00:22
>>845 この方法だとメモリを食いそうなんでこれでいいのか、
他に良いスタンダードな方法があるのかと疑問に思ったので。
タブとかeditコントロールはAPIなのでここで質問してみました
>>846 よさそうならこれで作ってみます。どうもです
Win32APIでエディタを作っています. ステータスバーに現在のキャレット位置を表示するために 下記のコードを書いてみたのですが,列の表示が上手くできません. 何か良い方法をご存知でしたら教えて下さい. m(_ _)m caretPos = (DWORD)SendMessage(hEdit, EM_CHARFROMPOS, 0, MAKELPARAM(pt.x, pt.y)); pt.y = HIWORD(caretPos) + 1; caretPos = (DWORD)SendMessage(hEdit, EM_CHARFROMPOS, 0, MAKELPARAM(pt.x, 0)); pt.x = LOWORD(caretPos) + 1; wsprintf(str, " %d 行, %d 列", pt.y, pt.x); SendMessage(hStatusbar, SB_SETTEXT, 1, (LPARAM)str);
>>852 メモリの使用量なんて作ってみたらわかることだ。
初心者なら、作る前に答えを欲しがらずに、作って考えることだ。
そいつゲイツだぞ
だから?
お布施しろ
どうやって? PayPalで送金するのか?w
とりあえず、VistaのUltimateを10本ほど。
ケチケチすんなよ MSDN Premium Subscriptionをパッケージで50本くらい買えばおk
>>853 キャレット位置ならEM_GETSELから調べ始めればいいんじゃね?
ペイントを操作して、絵を描こうとしているのですが、ウィンドウをポップアップできてもドローイングエリアを クリックできません。 C#の板でスルーされたのでやってきました、お願いいたします、教えていただけませんでしょうか? 。 [DllImport("USER32.DLL")] public static extern IntPtr FindWindow(string lpClassName, string lpWindowName); [DllImport("USER32.DLL")] public static extern bool SetForegroundWindow(IntPtr hWnd); [DllImport("user32.dll", CharSet = CharSet.Unicode)] public static extern IntPtr FindWindowEx(IntPtr hWnd, IntPtr hwndChildAfter, String lpszClass, String lpszWindow); [DllImport("user32.dll", CharSet = CharSet.Unicode)] public static extern bool PostMessage(IntPtr hWnd, UInt32 Msg, Int32 wParam, Int32 lParam); [DllImport("user32.dll", CharSet = CharSet.Unicode)] public static extern bool GetWindowRect(IntPtr hWnd, ref RECT lpRect); [StructLayout(LayoutKind.Sequential)] public struct RECT { public int left; public int top; public int right; public int bottom; } const uint WM_LBUTTONDOWN = 0x201; const uint WM_LBUTTONUP = 0x202; public void RemotePaint() { IntPtr hWnd = FindWindow("MSPaintApp", null); SetForegroundWindow(hWnd); hWnd = FindWindowEx(hWnd, IntPtr.Zero, "AfxFrameOrView42u", null); RECT winRect = new RECT(); GetWindowRect(hWnd, ref winRect); PostMessage(hWnd, WM_LBUTTONDOWN, winRect.right - winRect.left, winRect.bottom - winRect.top); PostMessage(hWnd, WM_LBUTTONUP, winRect.right - winRect.left, winRect.bottom - winRect.top); }
>>864 PostMessageでDOWNした後UPする前にスリープを入れる
早速のレスをありがとうございます。 Sleepを入れてみたんですが、点を打ってくれませんでした。 (T_T) PostMessage(hWnd, WM_LBUTTONDOWN, winRect.right - winRect.left, winRect.bottom - winRect.top); System.Threading.Thread.Sleep(500); PostMessage(hWnd, WM_LBUTTONUP, winRect.right - winRect.left, winRect.bottom - winRect.top);
[DllImport("USER32.DLL")] public static extern bool SetForegroundWindow(IntPtr hWnd); C丼はあまり詳しくないが、この辺のAPI宣言って合ってるのか? Win32のBOOLとC++や.NET系のboolって別物のはずだが
それはあってるよ。 C#のboolは1バイトだけど、Platform呼び出しの際は、 特に指定しなければデフォルトで4バイトBOOLにマーシャリングされる。
>>868 へ〜そうなんだ
VB6とかBooleanじゃなくてLongにする必要があったのに、便利な時代になったなぁ
クライアント領域の右下隅をクリックしたいように見えるけど、 GetWindowRectの結果使ったらボーダーの分だけはみ出さないかい? そもそもその右下の点に画像はあるのか
RECTを取る前に hWnd = FindWindowEx(hWnd, IntPtr.Zero, "AfxFrameOrView42u", null); で、hWndにドローイングエリアのウィンドウハンドルをセットしなおしていますが、 それではダメでしょうか? hWndを使いまわしていて、汚くてごめんなさい。
追伸ですが、以下のように、座標を固定で指定してやってもダメでした (T_T) PostMessage(hWnd, WM_LBUTTONDOWN, 100, 100); System.Threading.Thread.Sleep(500); PostMessage(hWnd, WM_LBUTTONUP, 100, 100);
ふつーSendInputとか使う。
875 :
デフォルトの名無しさん :2008/06/06(金) 07:13:29
SendInputってフォアグラウンドじゃないとだめじゃなかったっけ
876 :
853 :2008/06/06(金) 07:37:22
>>863 回答ありがとうございます.
EM_GETSEL は有力ですよね.
実は自分も最初はそれを考えて,
pt.x = LOWORD(SendMessage(hEdit , EM_GETSEL , NULL , NULL));
として列の位置を求めようとしていたのですが,
↓(1行,1列)
1234\r\n
6
↑(2行,1列)になってほしいけど,
実際には(2行,6列)... ORZ
という結果になってハマってしまったので,
ここで質問してみました.
結構メジャーな目的なので,どなたかご存知の方が
いらっしゃいましたら良い方法をお願いします. m(_ _)m
後の人のためにも.
(できればWin32APIで,テキスト全体をバッファに入れて改行を数えるとかは
最後の手段かなと思っています.)
877 :
853 :2008/06/06(金) 08:11:01
解決しました. offset = LOWORD(SendMessage(hEdit, EM_CHARFROMPOS, 0, MAKELPARAM((WORD)0, pixPt.y))); を設定して引いてやるだけでした. 前にこの方法も試していたのですが,pix での位置と char型 での位置が きちんと区別されていなかったために失敗していました. お騒がせしました.
(WORD)0 なんでこんな書き方するのか分からん
879 :
デフォルトの名無しさん :2008/06/06(金) 15:22:28
分からないならレスするなつってるだろ?
すいません
881 :
デフォルトの名無しさん :2008/06/06(金) 15:41:37
どんまい
882 :
デフォルトの名無しさん :2008/06/06(金) 16:14:32
吸いませんじゃなくてすみませんだろ?
吸わないよ
(WORD)0 なんでこんな書き方するのか分からん
break;
886 :
デフォルトの名無しさん :2008/06/06(金) 16:59:07
訳:かまってほしいな
>>872 GetClientRectでとれるのが「クライアント領域」、早い話がウィンドウ内部の領域
マウスイベントで指定する座標系はこれが基準。
GetWindowRectでとれるのは「ウィンドウ領域」、境界線とかも含んでいるので
一般にクライアント領域より大きい。
ちなみにRectで指定する座標は「右と下が1大きい」ものなので(理由は省略)
>866の計算だと、GetClientRectの結果使ったとしてもやはり1ドットはみだす。
以上参考までに。
888さん、ありがとうございます。(ゾロ目ですね・・・) GetClientRectでとれる「クライアント領域」が基本とのことなのですが、 GetWindowRectでドローイングエリアの座標領域を取って、Cursorを動かして、 SendInputクリックで左ボタンダウンとアップイベントを作ってクリックしているのですが、 「クライアント領域」を使った、いい方法があるのでしょうか? 当方、「クライアント領域」の有効な使い方が解っていないので、 よろしければご教授願えませんでしょうか。教えていただけると うれしいのですが・・・
>>889 有効とかどうとかじゃなくて、基本的な区別がわかってない
君がいう「ドローイングエリアの座標領域」の外側と内側とか
座標系の基準の違いとか色々ごっちゃにしてるって話
ここで説明できるような内容じゃないので入門書読め
別に、原点が画面の左上か、ウィンドウ(又はウィジェット)の左上というだけの話では?
こんな風に書いているので、問題があったら知りたいなぁという以上の意味はないので・・・ // ドローイングエリアの真ん中へ移動 Cursor.Position = new Point((winRect.left + winRect.right) / 2, (winRect.top + winRect.bottom) / 2); //クリック INPUT[] input = new INPUT[2]; // 計2イベントを格納 input[0].mi.dwFlags = MOUSEEVENTF_LEFTDOWN; input[1].mi.dwFlags = MOUSEEVENTF_LEFTUP; SendInput(2, input, Marshal.SizeOf(input[0]));
追伸、 466の記述時点では、Rectで何の値が取れるか分かっていなかったのですが、 デバッグプリントして、理解して、887の時点では、なんとか好きな所に点が打てるように なっていました。 (おそらく、入れ違いになってしまったのでは・・・と思っています。) ただ、この場合に、ウィンドウ内の座標を使って何ができるのかが知りたいのです。 この場合、テンプレの本を薦められても対象が高域過ぎるのでお勧めのURLや書籍 でもあれば、明日にでも探しに行きたいと思います。
いい加減うざいです>< Win32スレなのか.NETスレなのか分かりません><
ここってWin32APIスレですよね>< 言語が.NETだろうとWin32の話なら全然構わないと思います><
896 :
デフォルトの名無しさん :2008/06/07(土) 03:27:14
たとえば、スレッドの中にスレッド作った場合の注意点ってある? 開放する順番以外に。windowsスレッドって、ExitThread(true)で 自動で開放されたりしない?ハンドルクローズしないとダメ?
windowsスレッドって何だよ windows板なら分かるが
>893 何ができるかとかいう問題じゃなくて ┏━┓ ┗━┛ この枠の内側測るのと外側測るのじゃ大きさが違うだろ? 内側から測れって言われてるのに外側から測った数字使ってたりしたら 細かいところで計算が合わないからちゃんと意識しろってこと。
899 :
896 :2008/06/07(土) 06:05:37
>>897 Linuxのプロセスみたいにゾンビプロセスが残るのかとか
windows のスレッドはexitThread(true)でスレッド開放されるのかとか
スレッド自身がExitThreadを呼び出すか、スレッドの関数から戻ればスレッドは止まる。 どのスレッドによって作られたか、などということは一切関係ない。 また、そのスレッドを参照しているすべてのスレッドハンドルをCloseHandleしなければならない。 スレッドハンドルを閉じていないということは、まだ使うということだから。 スレッドがシグナル状態になっているかどうかを見るなど。 pthreadだって、明示的にpthread_joinかpthread_detachしなきゃならんだろ。
> 898 取れる数字に対する注意点を教えていただいたと理解しました。 894さんとか、うざがってる方もいることですので、この話題を終了したいと思います。 ありがとうございました。
>>899 > ExitThread(true)
こんな事を書いてるということはMSDN読んでないのがバレバレ
おいおい・・ そんなこと言ったら、ここの質問全てmsdn嫁で終わるw
ちょっと質問ですが、 //tmpgenc.pegasys-inc.com/ja/download/tp.html TMPGEncの支援ツールを作りたいと思ってます。 主に自動で次々と縁故してくれるように支援するツールです。 そこで、まずファイルをドロップしてファイル名を渡すところですが、ここはどんなAPIを使ってドロップしたことにしてやればよろしいでしょうか?
はぁ?
>>905 そのTMGENCの画面にファイルをドロップするところを、他のアプリから操りたいのです・・・。
はぁ?
知らないならレスしないでください
909 :
904 :2008/06/07(土) 14:50:36
908は私の発言じゃないですよ。 わかりにくいですか?
まったく分からない
初心者スレ池
910は私の発言じゃないですよ。 わかりにくいですか?
TMPEGの画面ってのがよく分からんが 画面へのドロップ動作をさせたいならOLE D&Dとマウス動作のシミュレートで良いんじゃね コマンドライン使えるならそっちの方がいいと思うけど
お前は何を言ってるんだ
LoadLibraryEx で LOAD_LIBRARY_AS_DATAFILE や LOAD_LIBRARY_AS_IMAGE_RESOURCE を
指定してロードした特定のモジュールのファイル名を、GetModuleFileName で取得できません。
(GetModuleFileName の戻り値は0だが、GetLastError の戻り値は ERROR_SUCCESS)
具体的に言うと、下のページの mxdrv.dll が該当します。
ttp://gorry.haun.org/mx/ どういったケースでそれが起こるのか、誰かおわかりになりませんか。
>>913 レスありがと。
ただOLE D&Dって初見なんだけど、これってつまりAPIでファイルを対象のウィンドウにドロップするやつはないってことですか?
917 :
916 :2008/06/07(土) 15:38:46
自己解決しました、ありがとうございます
英語MSDNのSendIMEMessageExに This function is obsolete and should not be used. と書いてた。 ってことは、IME使うにはどうすればいいんだ?
質問です。 対象のアプリのボタン(OKと書かれたボタン)が操作不可かどうかを判断したいのですが、 なにか手はありますでしょうか?
フックふっくにしてやんよ
IsWindowEnabledでいいんじゃね
IMMの次はTSFだぜ
ストリートファイターズ……
アルファベット3文字の略称って大抵は既に何かに使われてるよなw
_beginthreadexでつくったスレッドで現在稼動しているもののIDかなんかを取得するのは どうすればいいですか?Thread.currentThread()みたいなやつ
GetCurrentThread GetCurrentThreadId
IDってどういう意味だ? スレッドハンドルの事を言っているなら、_beginthreadexの戻り値がまさにそれだ。 必要ないなら、ちゃんとCloseHandleしておけ。 スレッドIDの事を言っているのなら、スレッドハンドルに対してGetThreadIdを呼べ。
931 :
918 :2008/06/07(土) 19:44:58
>>922 ,923
感謝する。
とりあえず今回はTSFの方向で考えてみようと思う。
>>931 え……?性転換ネタでいくの?キョン子はやめたほうが……
933 :
931 :2008/06/07(土) 20:05:29
>>932 TextServicesFlameworkですよ(汗
...とマジレスしてみる。
>>933 Text Services Frameworkですよとマジレス
Flamework 燃える仕事か。
>>934 一応言っておくと、GetCurrentThreadで得られるのは擬似ハンドルで
自分自身のスレッドを示す事にしか使えないからな。
938 :
933 :2008/06/07(土) 20:46:31
>>935 ,936
わざとだ。
ということにしておいてくれ。
炎上しているって事はデスマーチなんだろ
>>937 なんか書いてありましたね。でも
_beginthreadexの最後の引数に入るDWORDのIDはGetCurrentThreadIdのものと一致しますよね?
あと関係ないと思うんですが、MSDNの
_endthread と _endthreadex によって、C++ デストラクタはスレッドで保留状態になり、呼び出されません。
という日本語の意味がよく分からないんですが、どういうこと?
ThreadEntry(PVOID param) { CMyClass hoge; kansuu(); } kansuu() { _enthreadex(0); } hogeのデストラクタは呼ばれませんよということ 素直にreturnしとけ
日本語の意味が分からなかったら英語版を読めばいいだろ そもそも日本語版なんてWin95時代から更新止まってるのにそんなの見るなって
英語MSDNのSendIMEMessageExに This function is obsolete and should not be used. と書いてた。 ってことは、IME使うにはどうすればいいんだ?
英語MSDNのSendIMEMessageExに This function is obsolete and should not be used. と書いてた。 ってことは、IME使うにはどうすればいいんだ?
946 :
918 :2008/06/07(土) 21:27:22
なんかコピペされてる? 何事ですか?
英語MSDNのSendIMEMessageExに This function is obakadesu and should not be used. と書いてた。 ってことは、IME使うにはどうすればいいんだ?
MSDNのYieldのところに ウィンドウを含むスレッドでは、DispatchMessage 関数、PeekMessage 関数、または TranslateMessage 関数を使ってください。 てあるけど、どうやんのかね?
ウィンドウを作ったスレッドがなんでyieldなんかするんだよ
知らないならレスしないでください
糞スレ終了
次は、まだかな♪(・ ・。)(。・ ・)まだかな♪
質問したいんですけどいいですか?
ものによる。まずは質問して。
>>948 PeekMessageでぐぐればいろいろ例が見つかるはずだから、そのとおりにやればいい。
質問です CreateThreadで作ったのが糞スレッドかどうか判断するAPIを教えてください
CreateThread自体が糞だからそのようなAPIは用意されていません。
PCを起動したときに、それまで何日間起動されなかったか知りたいのですが、 前回シャットダウンした日時を取得する方法ってありますか?
イベントログ
>>958 >>959 のとおり、イベントログに情報がある。
ただ、OS起動やシャットダウンイベントはデフォルト設定だと記録されないはずなので、
設定を変えるか、もっと簡単にやりたいなら正確ではないけどイベントログサービスの
起動/停止時間をOS起動/シャットダウン時間とみなしてしまうやり方もある。
例がWin32APIでなくて申し訳ないけど、以下WMIのインタフェース使うスクリプトの例。
var query =
"Select * from Win32_NTLogEvent where " +
"LogFile = 'System' and SourceName = 'EventLog'";
var systemlogs = GetObject("winmgmts:!\\\\.\\root\\cimv2").ExecQuery(query);
var e = new Enumerator(systemlogs);
for (; ! e.atEnd(); e.moveNext()) {
var log = e.item();
if (log.EventCode == 6005) {//イベントログサービス起動
WScript.Echo("起動: "+log.TimeGenerated);
}
else if (log.EventCode == 6006) {//イベントログサービス停止
WScript.Echo("停止: "+log.TimeGenerated);
}
}
親切な人だなぁ・・ 質問者じゃないけど、感心した
質問者はトリップ付けた方がいいと思うお
そんな面倒な事わざわざしないお
IDがあればそんな面倒な事しなくもいいのにね
コンボボックスをオーナードローすると 初期表示状態が微妙に縦幅が太くなるんだけぢ どうやって元に戻すんdねすか? 中身の太さ(高さ)は↓で細くできたんです void CColorComboBox::MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct) { lpMeasureItemStruct->itemHeight = 14; }
またID厨か
967 :
965 :2008/06/08(日) 19:15:42
もひとつ問題が オーナードローを可変にすると(CBS_OWNERDRAWVARIABLE) ボックス内でマウスホイール動かしたときに意味不明な動きをします。 ホイールを下に回してるのに上からビローンって一回転して正しい 位置に回ってきます。なんだこれ。
またまたID厨か
ID厨ウゼェ
↑キモッ
ID厨の特徴 1. 「IDがあればなぁ」などと書く 2. 自演で荒らす 3. 「やっぱID欲しいな」などと書く
やっぱID欲しいな
IDがあればなぁ
俺の予想では荒らしてるのは一人か二人
かまってほしいな
>>975 二人以上なのか確実
おれ以外にも居るから
× なのか ○ なのは
りりかる
/* ここまで俺の自演 */
/* かまってほしいな */
/* コメント /*/ スイッチ //*/
>>977 いや一人だ
俺と、俺の中の別人格(=お前)
チィッ…右手よ、静まれ!
IDがあって困ることはないから、ID導入して欲しいな。 なんでム板はないんだっけ?
必要ないから
IDは昔はどこもなかった。基本的にはIDが導入される板というのは 人が多く荒れる事が多い板。今までム板では現状のこのスレみたいな 事がほとんどなかったから必要なかっただけかな
この程度で荒れてるって・・・
機能してない時点で十分荒れてるだろう、ここは雑談系の板ではなく専門板なんだから
それに加担してる事は自覚してるのかね
自覚してないけど、何か?
次スレ建ってないんだから減速しろ
ume
うめ
産め
埋め
おめ
こ
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。