スレ立てるまでもない、Win32APIのついての質問はこちらへどうぞ。
やさしいお兄さんやお姉さんたちが答えてくれるかも。
過去スレ、関連リンクは
>>2-5 くらい。
■注意
・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。
・日本語版MSDN Online Libraryは不完全です。英語版(
http://msdn2.microsoft.com/library/ )の利用推奨。
・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。
・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで
以上
前スレ最後の方で返り血の不統一が話題だったけど、 MS内部では、マック好みが多いってホント?
ロバート・フリップはiPod派だよ
質問です キーボードからの入力をフックして、仮想キーコードを置き換えるプログラムを作ろう思い、 SetWindowsHookEx()でWH_KEYBOARD_LLにフックをかけて、 フック関数側ではlParamからKBDLLHOOKSTRUCT構造体にアクセスし、仮想キーコードを変更するようにしたのですが、 このプログラムを起動した状態でメモ帳に何か文字を入力しても、キーコードが変更されず打った文字がそのまま出てきてしまいました。 フック関数からMessageBox()表示させることはできたので、フック関数自体は呼び出されている様です。 もしかするとWH_KEYBOARD_LLでは仮想キーコードの取得はできても置換はできないのでしょうか?
>もしかするとWH_KEYBOARD_LLでは仮想キーコードの取得はできても置換はできないのでしょうか? 概ねそんな感じ WH_KEYBOARD_LLで送られてきたキー情報を書き換えても メッセージキューのメッセージには影響しない
そういうのってデバドラ書かないと無理じゃなかった?
いや、置き換えだけならWH_WNDPROCでWM_KEY***とか見張ってればおk 目的のキーのWM_KEY***が来たら、仮想キーコード書き換えて PostMessageしなおせばいい
解説 GetMsgProc フックプロシージャは、メッセージの検討と変更を行えます。このフックプロシージャがシステムへ制御を返した後、GetMessage または PeekMessage 関数は、そのメッセージを変更結果と共に、最初にその関数を呼び出したアプリケーションへ渡します。 アプリケーションがこのフックプロシージャをインストールするには、WH_GETMESSAGE フックタイプと GetMsgProc フックプロシージャへのポインタを指定して、SetWindowsHookEx 関数を呼び出します。
つまりはMSDN嫁。と
16 :
10 :2007/11/12(月) 01:37:29
素早い返信ありがとうございます なるほど、やはり取得しかできないメッセージを捕まえてたんですね… 沢山キーワードを頂けたので調べながら作り直してみたいと思います
>>13-14 その方法ってGetKeyState/GetAsyncKeyStateとかも置き換えられたっけ?
置き換えるって言うか… 各スレッドはキーの状態を保持したキーボードマップを持ってて GetKeyStateはそこからキー情報を取ってくる キーボードマップはスレッドがGetMessageかPeekMessageした時に更新される で、WH_GETMESSAGEはメッセージがキューから取得される直前にフックを呼ぶ 後はどうなるか分かるよな
19 :
デフォルトの名無しさん :2007/11/12(月) 10:33:55
どのスレで聞くべきか迷いましたがここで質問させていただきます。 他のアプリケーションのウインドウを画像として取得するにはどうしたらよいのでしょうか?
HDC様を取得してみよう
なんだそれw
ビットマップのHDC様といっしょにBitBltでGo!
XP以降ならPrintWindow 2000以下なら方法は無し
SDKって上書きしていいの?
意味が分からん インストールの話なら一度アンインストールしとけ
というかSDKといってもいくつかあるからな Windows SDK 6.0なのか、Platform SDK最新版(今Server2003用か?)か
WinAPIでツールボタンを使ったウィンドウを作ろうと思ったのですが、
comctl32.dll、バージョン 5.82.2900.2982、エラー発生アドレス 0x0001d465
のようなエラーが出ます。WindowsXPHome,コンパイラはMinGWのgcc3.4.5,リソースコンパイラはwindres2.17.50です。ソースは下のようになっています。
*WndProc.c
LRESULT CALLBACK WindowProc(HWND hwnd,UINT message,WPARAM wparam,LPARAM lparam){
HINSTANCE hInst;
HWND hToolBar;
TBBUTTON tbb[]={{0,IDM_OPEN,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0},省略{5,IDM_TOOL5,TBSTATE_ENABLED,TBSTYLE_BUTTON,0,0}};
switch(message){
case WM_CREATE:
InitCommonControls();
hInst=(HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE);
hToolBar=CreateToolbarEx(hwnd,WS_CHILD|WS_VISIBLE,ID_TOOLBAR,6,hInst,ID_TOOLBMP,tbb,6,0,0,16,16,sizeof(TBBUTTON));
return 0;
省略
*resource.h
#define ID_TOOLBAR 100
#define ID_TOOLBMP 101
#define IDM_OPEN 102
省略
#define IDM_TOOL5 107
*resource.rc
#include "resource.h"
ID_TOOLBMP BITMAP DISCARDABLE "control.bmp"
また、このページを参考にしたのですがまったく同じように作っても同じエラーが出ました。
http://wisdom.sakura.ne.jp/system/winapi/common/common8.html 環境が問題なのでしょうか。だとしたら解決策などはあるのでしょうか。
ご教授願います。
とりあえずデバッガで追いかけてみたりしたかしら?
>>29 すいません、試していませんでした。今gdbでやってみたら
Program received signal SIGSEGV, Segmentation fault.
0x5ab7d465 in ImageList_AddMasked () from C:\WINDOWS\system32\comctl32.dll
と出ました。ImageList_AddMaskedを調べるとビットマップのイメージマスク関連のようですがそこまでしかわかりませんでした。
WindowProcにブレークポイントを設定し、hToolBarの内容を見てみると0xffffffffでしたがやはりこれが問題でしょうか?
いろいろ考え試してみましたがどうにもわかりません。ご教授願います。
>hToolBarの内容を見てみると0xffffffffでした INVALID_HANDLE_VALUEだろそれw 作成失敗してるw
ちがう。 CreateToolbarExの失敗時の戻り値はNULL。 でも0xFFFFFFFFが有効なハンドルって事はないから・・・。
おそらくImageList_AddMaskedの中で 無効なビットマップハンドル使ってるんだろうな 試してないがGetWindowLongに失敗してない? WM_CREATEってまだウィンドウ作成されてないからhWndって無効なハンドルの気が で、無効ハンドルのせいでインスタンスハンドル取れない→イメージリソースが取れない。と 試しにGetModuleHandle(NULL);にしてみろ
WM_CREATEでなら、 CREATEPARAMS const* pcs = (CREATEPARAMS const*)lParam;として、 pcs->hInstanceとすればインスタンスハンドルが取れる。
CREATESTRUCTだったorz
>>28 です。
>>33-35 すべて試しましたが結果は同じでした。
hInstのインスタンスハンドルは$2=0x7c953288で取れているようです。
また、hwndのハンドルも取れています。
コードをすべてどこかにアップロードしてしまったほうが解決が早いでしょうか…?
結局CreateToolbarExって成功してるの?
>>WM_CREATEってまだウィンドウ作成されてないからhWndって無効なハンドルの気が どんだけw
40 :
19 :2007/11/12(月) 18:01:53
>>20-23 PrintWindowでいきたいと思います。
ありがとうございました。
>>36 hInstが0x7c953288ってどう考えてもおかしいだろ
つーかこの程度のバグを解決できないスキルならMinGWなんて使わずVC使えよ
42 :
デフォルトの名無しさん :2007/11/12(月) 18:23:58
ビットマップでボタン作れますか? マウスがボタンに重なったら、ボタンに使われているビットマップを変更する等の処理もしたいのですが、
>>42 ボタンにビットマップ張ったらいいんでは?
どうやって張るんですかね? 本等にもあまり載っていなくて苦難してます。
質問です。 プログラムを動かそうと考えているマシンにはプリント用のネットワーク出力ポートがいくつかありますが、 EnumPortsを呼ぶとPORT_INFO_2構造体にはそれぞれ pMonitorName : TCPMON.DLL pDescription : Standard TCP/IP Port fPortType : 11 という値が入ります。 これらについて個々のIPアドレスを知る方法はありますでしょうか?
>>44 普通に
ボタン ビットマップ
でググれば出てくるが
>>28 です。
resource.rcに#include "resource.h"の記述をしないとなぜかウィンドウ自体は表示されます。
ですがビットマップイメージがボタンに張られていない状態です。
当たり前といえばそうなのですが、この情報から何かわかることはあるでしょうか?
たびたびすいません、ご教授願います。
>>37 プログラムが異常終了してしまうので成功していません。
>>41 おかしいのですか…どのようにおかしいのかわかりますでしょうか?
ソースをすべてアップロードしてみました。たびたびすいません、どこが悪いのかご教授願います。
>>28 に書いたソースよりいくらかいじったので違う点がありますが基本的に同じです。
http://www.dotup.org/uploda/www.dotup.org2842.zip.html
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆【一番クリックした国が優勝】参加者求ム!☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
イギリス人天才プログラマが運営する前代未聞の無料ブラウザゲーム、
http://clickclickclick.com/ ただひたすらクリックし、国別の総クリック数を世界中で競い合う!
究極にバカバカしくそして意味がなく、ひたすら時間の無駄でなんの得にもならない、だがそれが(・∀・)イイ!
ライバルはハンガリー、そして台湾!! GAME2から参戦し、現在GAME27開催中!
VIPで発祥し現在2ch全土から結集したクリック兵達で日本チームは戦っている!
意味のない事に全力を傾ける、それが2ちゃんねるクオリティ!!
独自のクリックツール開発競争も熱く、各国のプログラマが全力で優秀な兵器開発をしている!!
日本の技術力の高さを世界に見せつけてやろうぜ!
プログラマ、Flashゲーム製作者、動画職人、AA職人、絵師、DJ、wiki編集blog編集者、データ分析者etcも募集中!
ツール放置参加もできるので、PCのスペックに自身のある奴、CPUに空きのある奴、時間が余ってる奴もぜひ参加してくれ!
本スレッド
【簡単多重】一番クリックした国が優勝【8砲門】
http://wwwww.2ch.net/test/read.cgi/news4vip/1194741194/l50 ※落ちているときはここから1発検索
http://www.clickjapan.jp/find2ch.php 日本チームの有志によるまとめサイトポータル
http://www.clickjapan.jp/ ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
>>28 > リソースコンパイラはwindres2.17.50です。
これは、リソースに日本語が入っているとダメだったような…
ひょっとして、そっち関係とか。
>>48 だからVC使えと(ry
デバッガだけでもVCを使う価値は十分にあると思うが、どうしてもMinGWを使わなければならない理由でもあるのか?
52 :
デフォルトの名無しさん :2007/11/12(月) 22:37:23
WindowsはZIPを解凍するAPIを標準で持っているんでしょうか? また、あるとしたらどのバージョンからなんでしょうか。
ねーよ
>>48 ビットマップが24ビットだからじゃね?
256色以下にしてみ
パソコンの画面をキャプチャーしてメモリ内に格納したいのですが、 GetDCでデスクトップのデバイスコンテキストを取得し、 GetPixelで1ピクセルずつ取得する方法より、効率の良い方法は何かあるでしょうか?
DIB
>>52-53 ZIPフォルダを実現する関係上、ZIPファイルはシェルフォルダとして読み書きできる。
Me/XPから標準搭載だが、98ではPlus!に付いてきたはず。
また、2000でもMeからDLLを持ってくれば使える。
ようするにWindowsのバージョンなんて当てにしないで、
実際に試してみて成功すればOKという方針で行け。
>>57 OS再インスコしたら真っ先にregsvr32 /u zipfldr.dllなんだが
そんな不確かな物に頼るぐらいなら普通にunzip32やzlibでも使えばいい
>>55 1ピクセルごとじゃなくて普通にBitBltじゃだめなのか
>>59 自分で機能切ってるヤツまで知ったこっちゃねーだろ・・・
62 :
デフォルトの名無しさん :2007/11/13(火) 09:32:21
delphiのぐだすれで質問したらすれ違いと言われたのでここに来ました。 WindowsXPのアクティベーションとかで使用しているようなハードウェアハッシュを 自前のプログラムでも使用したいのですが どうやったら取得できますでしょうか。 すれ違いでしたら誘導願います。
>>61 そもそもなぜ圧縮フォルダをプログラムから直接利用する必要があるのかサッパリなんだが
外部DLL不要、世界最小のZIP解凍ソフト!とか作りたいのかねぇ
( ´,_ゝ`)プッ
言語問わずWin32APIが呼び出せるインタプリタ環境ってありますか?
Perl
PowerShell
>>70 こんなものもあるんですね、不勉強ですみません
APIとか一寸試したい時に、そういうのが欲しいとちょっと思わなくもないが、 結局Cや、GUI絡みでもMFC使えば簡単に試せるからなあ。
>>56 ありがとうございます。調べて見ます
>>60 >>58 取得した画面をファイルに出力したりネットワークで送信したりしたいのですが、
BitBltだと、出来ませんでした
そういう場合はGetDIBitsで検索
>>72 環境勝手にいじれない(非開発の)PCではAPI使うのにofficeのVBAしかなかったりするんだよ…
MSはPowerShell を優先度の高い更新に含めやがれ
あるいは会社のPCをすべて2008にしてください
.NETは結局XPに標準搭載されなかったんだっけか
標準搭載しなくていいよ
78 :
デフォルトの名無しさん :2007/11/14(水) 11:30:13
ファイルだの日時をコピーもしくは変更するAPIを教えてください
SetFileTime GetFileTime
日本語でおk
81 :
78 :2007/11/14(水) 13:12:30
フォルダでした。 ところでこれってFATでも機能するのでしょうか?
SendMessageで書き直したいのですが、どのように書き直せばよいのか教えてください。 (VB2005です)↓ 'キーコード送信 Dim DownUp As Integer = 0 Dim Down As Integer = 1 Dim Up As Integer = 2 Private Sub KBD(ByVal KEY_CODE As Byte, ByVal 状態 As Integer, ByVal ms As Integer) Sleep(ms) If 状態 = 1 Then Call keybd_event(KEY_CODE, 0, 0, 0) ElseIf 状態 = 2 Then Call keybd_event(KEY_CODE, 0, &H2, 0) ElseIf 状態 = 0 Then Call keybd_event(KEY_CODE, 0, 0, 0) Call keybd_event(KEY_CODE, 0, &H2, 0) Else End If End Sub
keybd_eventがやってることはSendMessageじゃエミュレートできないと思うんだが
場合による
キーイベントはポストだろ
ポストだとどんな感じですか?
マニュアル嫁
ポストはポストでも、マルチポストだろ
90 :
デフォルトの名無しさん :2007/11/14(水) 21:50:10
いろんな方が質問されている内容ですがうまくいかないので質問させてください。
WS_EX_LAYERED、SetLayeredWindowAttributes、LWA_COLORKEY、IDB_CHRISTALについて
「定義されていない識別子です。」というエラーでコンパイルできません。
ソースは以下のサイトを見ながら書いています。
http://www.kumei.ne.jp/c_lang/sdk4/sdk_346.htm 環境はVC++6.0、OSはWindowsXP SP2です。
やってみたこと
・ServicePack6 の適用
・Windows Server 2003 SP1 Platform SDK の PSDK-x86.exeをダウンロードしてインストール
→C:\Program Files\Microsoft Platform SDK\Bin\Orca.Msi を実行
・ソースに#include<WinUser.h> を追記
対処法がありましたら教えていただきたいです。
VC++のインクルードディレクトリの設定を変えろ。 新しいPlatform SDKのインクルードディレクトリを指すように。 winuser.hは昔も今もwindows.hの中でインクルードされるから、 自分でインクルードを明記する必要はない。
92 :
デフォルトの名無しさん :2007/11/14(水) 22:33:26
VC++のディレクトリとPlatFormSDKのディレクトリで 階層構造が多少違うようなのですが、、、、 で、適当にやったらインクルードファイルがオープンできませんってなりました・・・。(;つД`) メニューのツール -> オプション -> ディレクトリ タブ の中の設定を変更したんですが違いました?
WS_EX_LAYERED については警告はでなくなりましたが 下記エラーが出ます。インクルードディレクトリの指定がマズイのでしょうか? error LNK2001: 外部シンボル "__imp__SetLayeredWindowAttributes@16" は未解決です
_WIN32_WINNTとかWINVERとかじゃね?
>>75 ExcelあるならスクリプトからExecuteExcel4MacroでCALL Win32API
>>93 インクルードパス同様、ライブラリパスも設定する必要があるぞ。
>>94 ソース冒頭で
#define _WIN32_WINNT 0x0500
を指定しています。
WINVERというのが良くわかりませんが
#define WINVER 0x0400
と指定したところではエラーの内容は変わらずでした。
>>97 つーかVC6で使えるSDKの最終バージョンって2003年2月ぐらいの奴じゃなかったっけ?
一応2003SDKとかも使えなくも無いがリンクエラー出ることあるからやめといた方がいいと思うぞ
できました━━━━(゚∀゚)━━━━!!!!。 ありがとうございました。
タスクトレイのアイコン上でマウスホイールで操作したときに処理をすることを 考えているんですが、タスクトレイのアイコン上でマウスホイールを操作しても、 WM_MOUSEWHEELがとんできません。 WM_MOUSEWHEELをフックしても、タスクトレイのどのアイコン上なのか 識別する方法がわかりません。 NOTIFYICONDATAのhWndとかuIDを判別する方法ありませんか?
今ならWindowsSDKだけで十分なような気も
>>102 状況がよくわからんけど・・・
タスクトレイから通知が来たときのLPARAMを見てみる
あ、違うか どのアイコンか判定したかったらShell_NotifyIconのAPIフックからしないと駄目な気が 通知メッセージはユーザー定義だからフックできんし WM_MOUSEWHEELは普通にタスクトレイが受け取ってるはず
106 :
102 :2007/11/15(木) 00:13:14
>>105 レスどうもです。
えとですね。
自分のアプリで登録しているアイコンなんですよ。
タスクトレイのアイコン上で操作したときに、
例えば左クリックならばWM_LBUTTONDOWNは来るんですが、
マウスホイール操作のWM_MOUSEWHEELは来ないんです。
なので、WM_MOUSEWHEELをフックして処理しようかと思ったのですが、
自分のアプリで登録しているタスクトレイのアイコン上であるかどうかの
判別ってどうするんだ?と困っているところなのです。
>>101 そのページに書いてあるでしょ
>This SDK does not support working with Microsoft Visual C/C++®, 6.0 as support for VC 6.0 has ended.
>The last SDK that will work with VC 6.0 is the February 2003 Edition, you can order a CD on the fulfillment site.
2003年2月版でもXPSP1ぐらいまではサポートしてるので普通に使う分には困らないと思う
>>81 NT系ならFATでも使える。まだ9xサポートしてるのか?
>>95 知らなかった。ちょっと楽になる。サンクスですわ
110 :
デフォルトの名無しさん :2007/11/15(木) 06:46:39
zipの圧縮、解凍をサポートするapi関数ってある? Jpegの伸縮のように、外部ライブラリ入れないとダメかな
なんでXPでzipfldr.dllなんてDLLが追加されたか考えれば分かるだろう
スレ違いだけど.NETならGZipStreamクラスある
zip圧縮解凍ライブラリなんてネット上に腐るほどあるだろ zipfldrを呼び出す方が遥かに面倒だと思うが
COM使ったことあれば、そう面倒でもないと思うが・・・まぁ人それぞれか
zipfldr.dllのCOMインターフェイスって公開されてたっけ? IShellFolder::GetUIObjectOfでIDropTargetを取得してD&Dをエミュレートして・・・とか考えたけど結構面倒な気が 他に方法あったらおせーて
rundll32.exe zipfldr.dll,RouteTheCall %zipfile% これか?ためしてないけど
CLSIDFromString("CompressedFolder",&clsid); CoCreateInstance(clsid,NULL,CLSCTX_ALL,IID_IStorage,(LPVOID*)&pStorage); pStorage->QueryInterface<IPersistFile>(&pPersistFile); pPersistFile->Load("zipファイル名",STGM_READWRITE|STGM_SHARE_EXCLUSIVE); てな感じ、足りないとこは脳内補完よろ あとはIStorageとIStreamの操作で中身読める。 書き込みは試したことないけど・・・、たぶん似たような手順でいけるとおもふ
それって rundll32.exe unzip32.dll,UnZipCommandLine "%1" と同レベルな気が
リロードしてなかった
>>118 は
>>116 へのレス
>CLSIDFromString("CompressedFolder",&clsid);
これって将来的に大丈夫なのかな?
そんなモン気にするなってツッコミは無しで
質問です。 SetWindowsHookEx でグローバルフック登録しているのですが、runas 等で別のユーザで起動したウィンドウへのメッセージがフックできないようです。 普通の (同じユーザ) ウィンドウへのメッセージはフックできています。 何か方法はありますか?
別ユーザのウィンドウがフック出来たらセキュリティホール以外の何物でもないだろう ImpersonateLoggedOnUserとか使えばどうにかなるかも知れんが
自分も昇格する
123 :
120 :2007/11/15(木) 13:06:13
>>121 そういわれればそうですねぇ。
まあ、今回のは特殊用途なので権限は気にしなくていいのですが・・・
ImpersonateLoggedOnUser 知らなかったので調べます。
124 :
110 :2007/11/15(木) 15:11:57
c++は使えないから、comとか無しで頼む 普通にapi関数を一本呼び出し(ループでも)で使えないの?
無理だっつうの
もう自分でdeflate書け
>>124 例えCでもCOMは使えるぞ
いったい何を言ってるんだ?
>>124 unzip32使え
嫌なら.net使え
いずれにせよスレ違いだからもう来なくていいよ
(124は)CでCOMが使えない
124では無いがCでCOMなんて面倒すぎるだろ 第1引数省略できねーしスマートポインタ使えねーしlpVtblとか一々書いてられるか
で、だから何?
124みたいな奴がCでCOMなんかに手を出すとリークしまくりの糞プログラムにしかならんだろうという事だ
なるほど
>>110 一般公開されていないよ、MSのZIP解凍/圧縮は。
APIもCOMも。
このスレでいいのかどうか悩んだんですが
『Advenced Windows』を読む上で、Win32APIやOSの知識は前提になっているのでしょうか?
C/C++は一通りやったけどWindowsプログラムは未経験という段階の人間が、
>>1 にある言葉を借りると「APIフックなど高度な事」が最終目標だという場合、
先に『プログラミングWindwos』などを読んでおくべきなのかどうかと思いまして。
136 :
デフォルトの名無しさん :2007/11/16(金) 00:27:30
基礎的なAPIの知識は必要。 最終的にAdvenced Windowsを買う「べき」なのは間違いないと思うけど入門には向かない。 4倍ぐらいの量と金額のEffectiveC++ or STLを入門として買うようなもの。 個人的には APIで学ぶWindows徹底理解 ちゅうのが激しくオススメ
どこでエラーが出てるか調べろ
沢山のソースコードを読むほうがためになると思う。
はい
いいえ
はいえ
ないあるよ
146 :
135 :2007/11/16(金) 02:17:40
>>137 分かりやすい解説、ありがとうございました。
おすすめいただいた書籍、目次見てたらおもしろそうなので、
是非目を通してみたいと思います。
>>136 CW_USEDEFAULTはWS_OVERLAPPEDでないと効果がない。
WS_POPUPだと単にサイズゼロのウィンドウが画面外に作成されてしまう
148 :
デフォルトの名無しさん :2007/11/16(金) 11:22:25
TextOutで表示させる文字のフォントを変更したいのですが、 どのようにすればいいのでしょうか?
SelectObject
もっといえばCreateFont→SelectObject
スレ違いの場合は誘導をお願いします。 今、生DVDにデータを書き込むプログラムを作っています。理想は、時系列で増え続けるデータを direct recordingすることです。 ところがまず、Windows 2003 DDK添付のspti.cでWRITE DATA BUFFER operationがエラーコード2で 失敗する所ではまっています。 そもそも生DVDに対しては、spti.cでは書き込みは行えないのでしょうか?
_beginthreadex関数で、void*型の引数で文字列を渡したいんですけど _beginthreadex(NULL, 0, mythread, (void*)str, 0, (unsigned int*)&thID); でスレッド作成をして、スレッド内で char buf[256]; strcpy(buf, str); としていますが、上手く引数を受け取れません。 表示させてみると「フフフ…」となります。 strの部分を&strとしたり、色々試してみたのですが上手くいきません。 おとなしくグローバル変数で値を渡したほうがよいのでしょうか…。
呼び出している側の領域が、相手のスレッドが動作する前に消失しているんだろ。 馬鹿がよくやる。
154 :
デフォルトの名無しさん :2007/11/16(金) 16:55:25
よくわからないけど、とりあえずはキャストしないといけないんじゃない?
>>152 複数作成したりどうしてもグローバル変数使いたくないなら
動的に確保してやればいい
ローカル変数のアドレスを渡すなんて問題外
プログラミングに慣れてないならスレッドなんかに手を出すのはやめとけよ ネット上のサンプルでも排他制御やアトミックオペレーションしてない、いい加減なソースが多いしな
157 :
136 :2007/11/16(金) 20:11:06
>>147 また一つ賢くなれました。
ありがとうございました。
159 :
158 :2007/11/17(土) 08:39:59
160 :
158 :2007/11/17(土) 08:46:25
画像は、サンプルです。実際は単純な○△◇等です。 言語は、Vidual c++ 6.0以降 ダイヤログから出発、ボタンを押すと各図形を表示 宜しくお願いします
何が分かっていて、何がわからないの? CあるいはC++はわかるならプログラミングWindowsでも読め。
162 :
158 :2007/11/17(土) 09:16:18
ダイアログからダイアログの飛ばし方が分からないです。 とばすのに必要なのは? ダイアログでも図形は、書けるものなのか? それに必要なのは? とりあえずこの2点の知識お願いします。
>ダイアログからダイアログの飛ばし方が分からないです。 ダイアログを親ウィンドウにしてダイアログを生成する >とばすのに必要なのは? お前のプログラミング知識 >ダイアログでも図形は、書けるものなのか? 描ける (書けるって何だよ) >それに必要なのは? お前のプログラミング知識
やさしいインタネッツだな
ダイアログにその画像貼っとけ
167 :
158 :2007/11/17(土) 11:36:02
>>164 様 他
有難う御座います・・・
読んだけど、分け分から無いです。
取りあえず”Win32 API入門”を買って読みます。
必死なので、また来ます。
それでは、宜しくお願いします。
つーかMFCだろスレ違い
>>167 Win32 API入門って「サイト名」なんだけどね
>>168 少なくとも164に上がってんのはほぼ全部API
リソースとして埋め込んだビットマップを 普通にファイルからビットマップ読み込んだ時のように CreateDIBSectionする方法って無いでしょうか? リソースとして埋め込んだビットマップで アルファブレンド等をしたいのでピクセル列が欲しいんです、W98SEです
とりあえず、LoadImageにLR_CREATEDIBSECTION使っとけばいいんじゃね? 暇なら、FindResourceから始める、という手もあるけど。
今時98SEかよ
アクティブなウインドウのファイル名を取得するコードを書いてます。
ネットではぴったりのコードがなく、つなぎ合わせで
なんとかこんな感じでまとめたのですが、よくわからない
のもあって、うまく動きません。
環境はBCB WinXPです。
/*
//
ttp://m--takahashi.com/bbs/pastlog/11800/11731.html 1) GetWindowThreadProcessId() で HWND から ProcessID を得る
2) OpenProcess() で ProcessID から hProcess を得る
3) EnumProcessModules() で hProcess から hModule を得る
4) hProcess / hModule を使って GetModuleFileNameEx() でヤッター!!
*/
DWORD dwPID;
DWORD dwProcessID = GetWindowThreadProcessId(GetForegroundWindow(), &dwPID);
DWORD ProcessIDs[1000]; /* プロセスIDの一覧 */
HANDLE handle = OpenProcess(PROCESS_ALL_ACCESS, 0, dwProcessID);
DWORD ReturnSize; /* プロセスID一覧の取得結果のサイズ */
EnumProcesses(dwProcessID, sizeof(dwProcessID), &ReturnSize);//この行は?
if(handle)
{
HMODULE hMod;
DWORD size;
char fname[MAX_PATH];
EnumProcessModules(handle, &hMod, sizeof(hMod) ,&size);
GetModuleFileNameEx(handle, hMod, fname, sizeof(fname));
CloseHandle(handle);
ShowMessage(fname);
}
GetWindowThreadProcessIdの返り値はスレッドID
176 :
デフォルトの名無しさん :2007/11/17(土) 12:45:50
途中で送信しちまった GetWindowThreadProcessIdの返り値はスレッドIDなのに OpenProcessにスレッドID渡してるぞハゲ
EnumProcessesの第一引数
そもそもEnumProcessesいらないだろこの場合 HWNDからProcessID取るって言ってんだから
なんかもうアレ
DWORD dwPID; DWORD dwProcessID = GetWindowThreadProcessId(GetForegroundWindow(), &dwPID); 噴いたwww
181 :
デフォルトの名無しさん :2007/11/17(土) 14:47:18
wiodwsXP visual studio .net にてwindowアプリケーションを作っておりますが、 Heap corruption detected at 038A9008(最後の数字は毎回変わる) のような文章が「出力」の欄に出て警告もなしに勝手に終了します。 ググッた結果、どうやら領域確保あたりが怪しいらしく mallocやfree関数を調べましたが、おかしな点は見当たりませんでした。 他にどこらへんが怪しいと思いますか?
mallocやfree周辺
使ってるOSがおかしいよ
ヒープオーバーランだろ
>>181 プログラムのどこかで、メモリの確保した範囲外に書き込みをして、ヒープを破壊しまったんだ
プログラムのどの部分がどこに影響を与えるとかほとんど予測できないから、
問題が出なくなるまで怪しい場所をひとつずつコメントアウトして原因を絞っていくしかない
初心者は文字列用のバッファが怪しい 終端NULLが良くオーバーランしてる
ヌル文字はNULと書くようにしようぜ
APIスレに来てmallocとかfreeとか言ってるのが気に入らない HeapAlloc使えよ とかいう冗談はさておきWin32API関係ない。C初心者スレいってソースすべてうpすれば早く片付くかもね
>>185 ありがとう。めんどくさそうだけど頑張ります。
>>186 参考にしてみます。ありがとうございます。
>>171 のFindResource()のほうから調べながら試していたんですが
(BITMAPFILEHEADER)LockResource()
(BITMAPINFO)LockResource()
とヘッダとインフォのメモリへのポインタを取得して
インフォからCreateDIBSection()でHBITMAPを作成する所まではできたんですが
DIBSectionのほうで使用するメモリに
読み込んだリソースの方のメモリをコピーする所で躓きました
LockResource()でピクセル列の先頭ポインタを取得するために
どういうキャストをすれば良いのかが分からないので困っています
思いつくことを試しながらCopyMemory()しましたがどれも強制終了してしまいます
windows XP VC++ 2003 SetWindowRgnでウィンドウスタイルが変わらないようにするには どうすればいいですか? SetWindowRgnしなければXPスタイルなのに、関数を呼ぶと コマンドプロンプトと同様のスタイル(クラシック?)になります ウィンドウはVC++2003のWin32プロジェクトで新規作成した 雛形そのままです
193 :
デフォルトの名無しさん :2007/11/17(土) 18:11:14
ANSIビルドのプログラムで、ウィンドウ内に作成したエディットコントロールに ユーザーによって入力されたテキストを取得して、それをUNICODE形式のファイルに保存しようとしています。 処理の流れとして、エディットコントロール内のテキストの長さ(バイト単位)を取得して → 動的にメモリ確保 → WideChatToMultiByteでUNICODE文字列に変換 → WriteFile でファイルの先頭2バイトにBOMを書き込み → 変換後の文字列をWriteFile ファイルに書き込む こういう風にしています。 ただ、エディットコントロール内のテキストの長さを取得する段階でつまづいてしまって。。 なんだか、2バイト文字が正確に数えられていないようなんです。 エディットコントロール内のテキストが、「こんにちはwindows」のようになっていた場合。 この文字列「こんにちはwindows」のサイズ(バイト数)を正確に掴むためにはどうすればいいんでしょうか? ちなみにMFCはわかりません。
GetWindowTextLength(のA)でいけるぞ。 comctl32.dllバージョン6使っていたらUTF-16単位での文字数になるかもしれないが、 そのときには、そもそもNT系のはずで、W系APIを直接使って UNICODE文字列を取得してしまえばいい。
195 :
193 :2007/11/17(土) 18:51:26
lstrlen()でも同じ症状になるんですが、 例えば ANSIビルド版のプログラムでは lstrlen(TEXT("hello") = 5 lstrlen(TEXT("こんにちは")) = 10 ですが UNICODE版では lstrlen(TEXT("hello") = 10 lstrlen(TEXT("こんにちは")) = 10 となります。 確認してみましたが、GetWindowTextLengthでも同じ結果でした。 バイト数は分かりますが、文字数が分からないに思うんですが・・ 確かにメモリ確保にはバイト数だけ分かればいいんですが、そもそもGetWindowTextLengthって文字列の長さ(=文字数) を取得する関数という認識で間違いないですよね? UNICODE版は、文字数とバイト数(文字数×2)に何の不思議も無いんですが ANSI版は、文字数とバイト数がバラバラというか。。 ダブルバイト文字とシングルバイト文字が一緒くたでわかりにくいというか・・
196 :
193 :2007/11/17(土) 18:56:10
lstrlen(TEXT("hello") = 5 lstrlen(TEXT("こんにちは")) = 5 でした。 うぉー混乱する000 文字列を取得する関数って、 ANSI版だと、文字列のバイト数 UNICODE版だと、文字列の文字数 になってる??みたいですgあ・・
ユーザーが手入力するならたいした文字数じゃないだろうから、 単純にバイト数の倍確保しておけばいいんじゃね?
キーボードやマウスのボタンを押した時にはウインドウメッセージが出ますが、 ゲームパッドのボタンを押した時にはWMは出ているのでしょうか? 出ていればそのメッセージを教えて頂きたく思います。 60fpsのゲームループの中にゲームパッド情報取得の「〜->GetDeviceState〜」を書くと まれにエラーが出てしまうため、他の方法を模索しています。
200 :
193 :2007/11/17(土) 19:18:51
>>197 うーん。そうなんだけどねぇ。
あとMultiByteToWideCharの最後の引数は文字数を指定しろってなってるから、
これが原因なのかどうか分からないけど、UNICODEファイルとして保存したとき
最後にゴミがつくんです。
一応メモリ確保はGlobalAlloc(GPTR, dwSize)とやってますんで、0で初期化されてるはずなんだけど。。
どこがおかしいのかが分からないという。。。
>>191 FindResourceの方は半ば冗談だったのだけどな……
LockResourceで先頭のアドレスが取れるのだから、後はそれを手繰っていくだけ。
中身は通常のビットマップのファイルとほとんど一緒。
ただし、BITMAPFILEHEADER部分が省かれているので、その点には注意。
ウィンドウのメニュー部分を透明にすることは出来ますかね?
C++で静的な仮想関数を使用する方法 or 参考HPを教えてください。
やりたいことは、_beginthreadexでスレッドクラスを作成して、
子クラスで任意の子メソッドを呼び出すことです。
つまづいている点は、_beginthreadexのコールメソッドが、
Staticなため、子クラスがオーバーライドできなくて困ってます。
ちなみに、以下のHPを参照しましたが、
これよりスマートな方法があれば教えてください!
よろしくです!
C++で遊ぼう「静的仮想関数」編
ttp://www.ksky.ne.jp/~seahorse/cpp/staticvirtual.html
>>203 「スレッドクラス」「子メソッド」「コールメソッド」「子クラスがオーバーライド」の意味が
わかりません。
エスパーカモン。
205 :
203 :2007/11/17(土) 20:23:21
203です。スレッドだと話がややこしいのでサンプル書きました。 以下で、BとCクラスのtest()を呼んだとき、BとCのtest1()を読んでほしいという質問です。 よろしくおねがいします。 #include <iostream> using namespace std; class A{ public: static void test1(void){cout << "A" << endl;} void test(void){test1();} }; class B : public A{ public: static void test1(void){cout << "B" << endl;} }; class C : public A{ public: static void test1(void){cout << "C" << endl;} }; int main(int argc, char *argv[]){ B *bbb = new B(); C *ccc = new C(); bbb->test(); ccc->test(); delete bbb; delete ccc; return 0; } 実行結果: A A
>>203 やりたいのはこういうことじゃないか?
静的な仮想関数なんてわけのわからないものは必要ない
class A{ public: virtual void test1(){ cout << "A" << endl; }};
class B{ public: virtual void test1(){ cout << "B" << endl; }};
class C{ public: virtual void test1(){ cout << "C" << endl; }};
void thread_main(void *p){
static_cast<A*>(p)->test1();
}
int main(int argc, char **argv){
B *bbb = new B();
C *ccc = new C();
_beginthreadex(NULL, 0, thread_main, bbb, 0, NULL);
_beginthreadex(NULL, 0, thread_main, ccc, 0, NULL);
....
}
>>205 static を virtual に変えて終了。
Windows API 関係ないなら C/C++ スレいけば?
>>205 thisポインタで自分を取り戻すんだ!
209 :
203 :2007/11/17(土) 20:53:03
203です。
>>207 ,206
_beginthreadexで実行する関数が、GlobalかStaticの制限があるのです。
また、スレッドクラスを継承するクラスは、簡単に使えるようにしたかったのです。
わけあって、MFC等のライブラリを使用できないのです。
>>208 thisを渡す方法も検討したのですが、これも上記Win32APIの理由で・・・
C++すれ逝って来ます。どうもです。
>>209 > _beginthreadexで実行する関数が、GlobalかStaticの制限があるのです。
嘘だろ?どこに書いてある?
_beginthreadex のせいでこんなことになってるなら C++ スレに逝っても
迷惑なだけだろう。
>>209 >thisを渡す方法も検討したのですが、これも上記Win32APIの理由で・・・
どの理由だよ
thread_mainはグローバル関数なんだから制限の範囲内じゃん
>>201 カスタムリソースにも興味があったのでFindの方やってみようかなと思って
アドバイスありがとう、やってみます
class A {
public:
virtual unsigned threadProc () = 0;
static unsigned threadProcStatic (void * arglist) {
return ((A *)arglist)->threadProc(); }
void Start () {
_beginthreadex(threadProcStatic, this); // 引数適当 }
};
class B : public A {
public:
virtual unsigned threadProc () { // なんか }
};
こんな感じじゃ駄目なのか?
>>209
214 :
203 :2007/11/17(土) 22:14:30
203です。Win32APIよくわかってなくてスイマセン。
>>210 _cdeclか_clrcallで渡すことが規約のようです。global or 非staticなメンバ関数を渡せるなら教えてください。
>>211 混乱しててスイマセン。_beginthreadexとthisをどううまく使えば良いのかわかりませんでした。
>>213 ありがとうございます!これで動きました!一度staticな関数を噛まして非staticを呼ぶのですね。
皆様どうもありがとうございました。
>>214 >213 は >206 と同じことなわけだが。
>>195 >ANSI版は、文字数とバイト数がバラバラというか。。
>ダブルバイト文字とシングルバイト文字が一緒くたでわかりにくいというか・・
それが、可変長であるダブルバイト文字列というもの。
それに嫌気がさしたから、UNICODEは1文字が固定長になっている。
#というはずだったが現実そう上手くは行かず。
>>196 ANSIだとchar型、UNICODEだとwchar_t型でどれだけの要素数を占めるのかと考えればよい。
217 :
デフォルトの名無しさん :2007/11/18(日) 00:01:51
>>215 206は再利用ということを考えてないっぽい
CreateListViewMitainaControl()
>>219 ありがとう。そんな便利な関数があるんだね
CreateListViewでググって勉強してくる
>>199 やっぱり無いですか。調べても出てこないわけだ
エラー無くす方向で頑張ってみます
>>198-199 無いこともない。joySetCaptureでググれ。
といっても、これを使ったところで全く解決にはならないけどな。
結局自分の代わりにポーリングして監視してくれるだけ。
ゲームパッドはキーボードやマウスのようにmake/breakコードを
送信するいわゆる割り込みデバイスではないから、能動的に
状態の変化を受け取るのは不可能。
画面上の任意のテキストを右クリックして、文字列を取得するにはどうしたらよいでしょうか。
Babylon
ttp://www.babylon.com/jpn/ のような感じで、Webブラウザに表示されたWebコンテンツでも、
ウィンドウのタイトルの文字列でも、自由にテキストを取得できるようにしたいです。
調べた限りでは、クリックした座標を元にウィンドウハンドルを取得し、該当する文字列を*丸ごと*取得することはできます。
しかし、*クリックした付近の文字列*を取得することが必要なのです。何かよい方法はありますでしょうか。
先に言っておくが汎用的な方法は無い テキストが表示されてるのがEDITクラス(エディットコントロール)なら EM_GETSELで選択範囲を取れるから WM_GETTEXTでテキストを取ってから選択範囲を切り出せばいい ブラウザの場合は表示されてるのはキャプションじゃないのでもっと別の方法が必要になる 具体的には IWebBrowser2→IHTMLDocument::selection→ HTMLElement::createTextRange→IHTMLTxtRange::findText って感じで取る まあ無理だろう
Babylonは画面上の「画像」をOCRで読み取ってる だからIEだろうがFirefoxだろうが、画像中の文字だろうが読み取れる 同等の物を作るのは相当な困難が予想されるが、まぁがんばれw
>>227 >Babylonは画面上の「画像」をOCRで読み取ってる
これ、まじ?
("O(ptical)"では無いだろうというツッコミは置いといて、)
ほんとに、画像→文字認識してるの?
>>228 Babylonの説明にそう書いてあるだろう
例に出してるものくらいちゃんと調べろよw
230 :
228 :2007/11/18(日) 10:48:08
どこの誰が書いたかわからんヨタかもしれん話をいちいち調べるかよw
232 :
158 :2007/11/18(日) 11:05:38
233 :
158 :2007/11/18(日) 11:09:45
236 :
デフォルトの名無しさん :2007/11/18(日) 11:59:39
>>232 普通にボタンがクリックされたメッセージ処理に、DialogBoxかDialogBoxParamを呼び出せばいいだけじゃないの?
昨日の質問というのは見てないので分からんけど、メッセージボックスだってDLL内でリソース確保して
DialogBoxParam関数を呼び出しているだけのような気がする
モーダルダイアログボックス
宿題お願いすると簡単に答えてくれるスレはここですか?
宿題スレでやれ
240 :
158 :2007/11/18(日) 14:04:35
>>236 様
>>237 様 他
有難う御座います・・・
けれど、駄目だ Orz 分け分からないです。
void CKadai1119Dlg::Onmaru()
{
// TODO: この位置にコントロール通知ハンドラ用のコードを追加してください
//MessageBox("○の表示");
DialogBox(hInst, (LPCTSTR)IDD_maru, hWnd, (DLGPROC)About);
}
IDD_maru ダイアログを新たに作成し、取りあえず付けました。
当然エラー
C:\Documents and Settings\あ\デスクトップ\kadai1119\kadai1119Dlg.cpp(178) : error C2065: 'hInst' : 定義されていない識別子です。
C:\Documents and Settings\あ\デスクトップ\kadai1119\kadai1119Dlg.cpp(178) : error C2065: 'hWnd' : 定義されていない識別子です。
C:\Documents and Settings\あ\デスクトップ\kadai1119\kadai1119Dlg.cpp(178) : error C2065: 'About' : 定義されていない識別子です。
241 :
158 :2007/11/18(日) 14:08:11
以上のエラーが出ています。 根本的に知識が足りないです。 サンプルプログラムや文献を漁ってみます。 とても、237様に感謝してます。参考にして頑張ります。
基礎からやれってことだ 横着したって無駄 ここは宿題スレではない
244 :
デフォルトの名無しさん :2007/11/18(日) 16:00:50
俺は、応援してるぞ158w
__ /__.))ノヽ .|ミ.l _ ._ i.) (^'ミ/.´・ .〈・ リ .しi r、_) | しゃぶらないか? | `ニニ' / ノ `ー―i´ / ̄ '  ̄ヽ / ,ィ -っ、 ヽ | / 、__う人 ・,.y i | /  ̄ | | ヽ、__ノ | | | 。 | / | ヽ、_ _,ノ 丿 | (つ) | | / ヽ |
がんばれ158w
エディットボックスを透明にすることは出来ますかね?
非表示にすればいい
頭いいな
間違えました。 透明な背景を持つようにするにはどうしたらいいですかね?
レイヤードウィンドウでカラーキーを設定する
透明なエディットボックスって何の役に立つの?
仕事中に官能小説でも書きたいんジャマイカ?
ググッてるんですが、中々難しいです。 >254 機能的にはなんの役にも立ちません。 しかし、描画してあるビットマップがエディットボックスの背景色と重なるのは少し気になります。
1. WS_EX_TRANSPARENTを設定する 2. WM_CTLCOLOREDITでNULL_BRUSHを返す これで透明にならなければEditコントロール自体の問題だからMSに文句言うか諦める
258 :
デフォルトの名無しさん :2007/11/18(日) 23:32:39
.NETでも探しているのですが、Win32APIでも探しています。 Windowsのユーザーアカウントの一覧リストをプログラム上で表示して そこからアカウントを選択するようなことをする場合、ユーザーアカウントの リストを得るためのクラスやAPIがあればうれしいのですが、どのようなものがある でしょうか? また、そのリストを、Domain上のユーザーアカウントに対しても取得したい 場合にも有効なクラスやAPIであれば尚ありがたいです。何卒よろしくお願いします。
static HBRUSH hBrush; switch (msg) { case WM_CREATE: hBrush = CreateSolidBrush(123); hEdit = CreateWindowEx(WS_EX_CLIENTEDGE,"EDIT", "", WS_CHILD | WS_VISIBLE | WS_BORDER | ES_AUTOHSCROLL, 100, 10, 200, 25, hWnd, (HMENU)ID_EDIT, hInst, NULL); SendMessage(hEdit, EM_SETLIMITTEXT, (WPARAM)63, 0); case WM_CTLCOLOREDIT: SetBkColor((HDC)wParam, 456); return ((LRESULT)hBrush); break; こうですかね?
標準機能では背景を透過させることは出来ない。 以上
dllから、そのdllを読み込んだexeにメッセージを渡したいのですが どちらもウインドウを持たない場合はどのような手段が考えられるでしょうか。
メールを送信する
メモリマップトファイル アトム
>>261 コールバック関数用意しとけばいいんじゃね?
非同期でよければexeからdll呼び出すときに変数のポインタ渡せばいいんじゃない? コールバックが一番確実だろうけど。
>>259 hBrush = CreateSolidBrush(123);
SetBkColor((HDC)wParam, 456);
ナンダコレw
Process Explorerでプログラムのsuspendとresumeが可能なんですが どんなAPIを使ってるんでしょうか?
ねいてぃう゛API
スレッドを列挙してSuspendThread連打
たぶんNtSuspendProcess 調べてもないけど
271 :
261 :2007/11/19(月) 14:22:54
リソースからではなく、ファイルからアイコンを取得してイメージリストに 追加したいんですが、どういう方法をとればいけるんでしょうか。
LoadLibraryで開いて、LoadIconなりLoadImageなり
すいません、dll内のものじゃなくて、iconファイルやbmpからです。
LoadImage で LR_LOADFROMFILE
>>275 ありがとうございました。
解決しました。
透過出来ないのはなぜなんですか?
何が?
人体
人体より衣服を透過したい
夜店で売ってるよ
>>280 ユーザーモードでは他人の衣服を透過させる事はできない
まずはターゲットに対しての特権取得を行う必要がある
衣服の透過は実装例とか見つからないので詳しくはわからないけど、 管理者権限でも衣服にアタッチできないんなら諦めたほうが素直じゃないか?
透過した衣服を着てくれる彼女を作ればいいよ
境界線をクリックした時に出る 変な網目のようなバーを描画する関数ってあるんでしょうか?
あるといえばあるし、ないと言えばない。 あらゆるプログラムは関数を組み合わせて書く。
>>286 白黒のブラシを作って、それで反転させる。
290 :
デフォルトの名無しさん :2007/11/20(火) 06:43:28
1つのアプリでコンソールを複数表示したいのですが、どうすればいいですか? stderr用とかstdout用とかにわけたいんですが。
コンソールは各プロセスに 1 つしか割り当てることができません。
すでにコンソールを持っているプロセスが AllocConsole 関数を呼び出すと失敗します。
FreeConsole 関数を使って現在のコンソールからプロセスを切り離すと、
AllocConsole 関数を呼び出して新しいコンソールを作成することができます。
AllocConsole 関数は、新しいコンソールの標準入力ハンドル、標準出力ハンドル、
標準エラーハンドルを設定することもできます。
標準入力ハンドルはコンソールの入力バッファのハンドル、
標準出力ハンドルと標準エラーハンドルはコンソールの画面バッファのハンドルです。
ハンドルを取得するときは、GetStdHandle 関数を使います。
この関数は主に、グラフィックスアプリケーションでコンソールウィンドウを作成するときに使います。
グラフィックスアプリケーションは、コンソールなしで初期化します。
コンソールアプリケーションは、切り離されたプロセスとして作成する
(CreateProcess 関数を呼び出すときに DETACHED_PROCESS フラグをセットする)
場合を除いて、コンソール付きで初期化するのが普通です。
ttp://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpfileio/html/_win32_allocconsole.asp CreateConsole
AllocConsole
FreeConsole
コンソールを持つ子プロセスを複数用意して CreateProcessの時に親プロセスのstderrやらstdoutをそれぞれのstdinに当ててしまえば可能かも名
293 :
デフォルトの名無しさん :2007/11/20(火) 09:41:19
ブラウザのお気に入りとかのウィンドウのサイズを変える境界線みたいなのってどうやって作るんですか? 境界線を移動できるオプションをウィンドウに設定しても、動くのは一つのウィンドウだけで、 その他のウィンドウはそれに反応してリサイズされないですよね?あの境界線ってどうやって作るのでしょうか?
リサイズされるたびに再計算してるだけ
297 :
デフォルトの名無しさん :2007/11/20(火) 14:21:09
でも画面DCに反転ブラシで書く方法はAeroGlass環境だとクソ重くなるぞ スプリッタならエクスプローラみたいにダイレクトにサイズ変更するようにしたほうがいい
普通はスプリッタウィンドウの中に子ウィンドウを置くだろ
300 :
デフォルトの名無しさん :2007/11/20(火) 20:19:01
スプラッタ?
バケラッタ!
(/O^)/
はらへった
hDCはEndPaintで開放されるのでしょうか? case WM_PAINT: // クライアント領域を再描画する処理 hDC = BeginPaint(hWnd, &ps); TextOut(hDC, 0, 0, s, lstrlen(s)); EndPaint(hWnd, &ps); return 0;
そうだよ。PAINTSTRUCTの中にhDCが保持されているので、 そこからEndPaintは解放するデバイスコンテキストを見付ける。
なるほど、そういうことだったのですね デバイスコンテキストはプロシージャを抜けるまでに開放しないと やばいことになる(どうやばいのかは知りませんが)と聞いていたので どこで開放してるのか必死になってさがしまつた
しかしPAINTSTRUCTの中のhdcと同じもの返すって普通に考えたら謎な実装だな。 文字列系関数で渡したバッファのポインタそのまま返すのと似た感じでコーディング楽にするためなんだろうか。
>>307 BeginPaint の動作を勘違いしていると思う・・・
そうか?
>>307 はpsのメンバにもhdcあるのに、戻り値でも返してるって言ってるだけでは?
確かに 別に戻り値は普通にT/Fで良いんだけどな いいけどさ
311 :
307 :2007/11/21(水) 14:37:28
>>308 >>309 の通り。
かなりくだらないレベルかもしれんが、PAINTSTRUCTとHDCを両方定義するのが無駄と思って
戻り値は無視(NULLチェックだけ)してPAINTSTRUCTのhdcだけを使うようにしてる。
VBのWithのようなものがあったら俺もそうするな。 まあ今でもPAINTSTRUCTの変数名はいつもたった2文字、psだけど。
Windows Version 1 の頃の TextOut(BeginPaint(hWnd, &ps), 0, 0, s, lstrlen(s)); の名残
色はつけれるけど、透過ができねぇぇぇえええ!!!
つGDI+
hdcはWM_PAINTのWPARAMで渡される訳だが
WM_PRINTと勘違いしてないか?
>>317 URL貼るなら最後まで読めよw
> For some common controls, the default WM_PAINT message processing checks the wParam parameter.
> If wParam is non-NULL, the control assumes that the value is an HDC and paints using that device context.
そんなイレギュラーな仕様は常用すべきではないだろう
>>321 お前英語苦手だろw
もう少し詳しく説明されてる古いWin32SDKヘルプの説明を貼ってやろう
> Handle to the device context to draw in. If this parameter is NULL, use the default device context.
> This parameter is used by some common controls to enable drawing in a device context other than the default device context.
> Other windows can safely ignore this parameter.
何にせよまずはBeginPaintが基本ということでいいのでは?
エクスプローラでマイコンピュータを開くと表示される 「ローカル ディスク」や「CD ドライブ」といった文字列を取得するには どうすればいいのでしょうか? 30分以内に小倉優子ばりのおっとりキャラで答えてください
shell32.dllからGetResource
SHGetFileInfoで取れぬのか?
330 :
デフォルトの名無しさん :2007/11/22(木) 17:37:49
割り込んで申し訳ないのですが、教えてください。 DirectX全画面のゲームの上から、文字や画像を表示する方法はないでしょうか? (レイヤードウィンドウとかはダメでした。。。)
グラフィックカードに直接アクセスして 描画領域くりぬいてるから駄目なんじゃない?
よくチートツール類がやってる方法: プロセスに潜り込んでIDrectDraw***を乗っ取り、そのBlt()あるいはBltFast()に割り込んで自分で書く。
>>330 俺は普通に枠なしウィンドウで文字表示したことあるけど
べつにその画面内に描画したいわけじゃないんだろ
334 :
デフォルトの名無しさん :2007/11/22(木) 19:37:41
330です。 説明不足ですんません&ありがとうございます。 よくMODツールなんかで見かけるやつです。 (レースゲームなんかでスピードメータを追加する改造など) でもどうやったら、DirectDraw***のオブジェクトを乗っ取れるか? それができたらやりたい放題ですね。 そこをぜひぜひお願い申し上げます。 (僕のプログラミングレベルでは・・ デバイスコンテキスト取ってDrawText、BitBltぐらいしかできないっす。)
そのレベルじゃ厳しすぎるだろ・・・
>>334 (1) APIフックで CreateDirectDrawの類をフックして順次wrapperオブジェクトを返す
(2) 途中まで同じで、wrapperは使わず IDirectDraw9Device 等の vtbl を書き換える
のどっちかかな。
APIフックの仕方やvtblの書き替え方を自分で見つけられる程度の実力があれば、
地味にやってけばできるでそ。
337 :
デフォルトの名無しさん :2007/11/22(木) 20:41:49
334です。
>>335 やっぱり?
>>336 ありがとうございやーす。
とりあえず正しい方向へ行けるのでホッとしました。
あとは学習あるのみ・・・
>>337 dxwndのソースが参考になるかもな。ならんかも知れんが。
DirectDrawって・・・ もう今じゃほとんど使われていないぞ
DWMをXPでいぢりたひ
341 :
デフォルトの名無しさん :2007/11/22(木) 21:30:23
>>338 中に「int HookDirectX(TARGETMAP *target)」こんな関数あったよ。
モロです。
地道にやってたら2週間かかってたかも
嬉しいんだけど、ちょっとはずかしい。
>>337 ぶっちゃけTaksiが全てのソースを公開してるんだがな
CはJavaとかとちがってガベコレがないから プログラマがすべてリソースの開放をしなければならないと聞いたのですが どの入門サイトもそれらしいコードがないのですがなぜでしょうか? 最初にメッセージボックスを表示するサンプルが多いようですが メッセージボックスを開放する処理はどうすればいいのでしょうか? また、ウインドウを作成したときもPostQuitMessageを送るだけで その後ウインドウを開放するようなコードがないHPばかりなのですが
>>343 リソースの解放なんて必要ないよ。
一部の特殊なリソースを除けば、プロセス終了で、OSが全て片づけてくれる。
>>343 malloc/freeやnew/deleteというのがあるじゃないか。
GetBufferしたらReleaseBufferしなきゃならないとかもそう。
ファイルは開いたら閉じるのだってリソースの解放だ。
メッセージボックスの件はネタだと信じたい。
>どの入門サイトもそれらしいコードがない >その後ウインドウを開放するようなコードがないHPばかりなのですが 文面から察するに経験豊富というわけではないだろうから、 「それらしい」や「するような」という判断自体が怪しいが このレスからじゃあどのページをもってそう判断しているのかわからない >Cは……プログラマがすべてリソースの開放をしなければならない というのはC言語としての話であってWin32APIの話ではない。たとえば >その後ウインドウを開放するようなコードがないHPばかりなのですが の場合、「ウインドウを開放する」というコーディングはWinAPIとして要求してないと思われる。 (これもどのコードについて言っているのか解らないので推測だが) まともなページであれば、APIとして開放しなければならないリソースはAPIの作法で開放されている。 ただその作法を知らないのであれば開放のコードは見つけられないかもしれない。 ( HANDLE hFile = malloc(...) / free(hFile) なんてしないので) なので勉強しろ。そして調べろ。
論文がはかどらなくてムシャクシャして書いた。 開放がすべて誤字であることに気づいたが反省はしていない。あすも平日だがまだがんばる。
349 :
デフォルトの名無しさん :2007/11/23(金) 01:01:27
メインスレッド内でCreateThreadで作成した複数の副スレッドのうちの特定の一つのスレッドを、 メインスレッドから停止(停止っていってもいい?スレッドを消したい)させるにはどうしたらいい? ExitThreadでは特定スレッドを別スレッドから狙い打ちにできないような??? ねぇどうすればいい??
hoge.exe: user error (GetClientRect: ヲ」ヲ マ・!ケgY (error code: 578)) ってどういう意味のエラーなのでしょうか? 一部の文字化けは元からです。 コンパイル環境:mingwで g++ hoge.c -mwindow
>>349 ExitThreadは呼び出し元のスレッドを終了させる奴だ
別スレッドを終了させるならTerminateThread
ただ別スレッドで作成したリソースが残る可能性があるから
続行判断用のフラグをCreateThread時に渡しておく方がベターだと思う
その場合はフラグの領域が先に開放されないように注意が要るけど
354 :
デフォルトの名無しさん :2007/11/23(金) 01:44:19
>>352 TerminateThread、そういう関数がありましたか。。
ExitThreadはc標準の_exitthreadみたいなもんなんですね。
>>352 さん指摘どおり、たしかに
「TerminateThread is a dangerous function that should only be used in the most extreme cases.」
ってありますね。
やっぱりパラメーターで渡しておくほうがよさげですね。
でもこのやり方嫌いなんだよなぁw なんか副スレッドがいつ本スレッド内のパラメーターの変更をチェックしてるんだよ、と
渡来してみます。ありがとうございました。
355 :
351 :2007/11/23(金) 01:52:37
どういう理由かわからないのですが、 実行ファイルを削除してから再コンパイルすると正常に(?)動作しました。
_で始まる関数は標準じゃないぜ これ知らないと俺みたいな一言居士がうるせーから要注意な
読み取りだけなら領域が無効になってなきゃ別にいつだって良いだろ 書き込みなら排他制御すべきだが
____ /__.))ノヽ .|ミ.l _ ._ i.) (^'ミ/.´・ .〈・ リ .しi r、_) | チャリーン | `ニニ' / __ lヽ,,lヽ ノ `ー―i´ | |Θ|( ) | ̄ ̄ ̄| ̄ ̄|_ |_|_|と i |___|__|_| |_| しーJ ____ /__.))ノヽ .|ミ.l _ ._ i.) (^'ミ/.´・ .〈・ リ <ヘンリーはわしが育てた .しi r、_) | | `ニニ' / __ lヽ,,lヽ ノ `ー―i´ | |Θ|( ) | ̄ ̄ ̄| ̄ ̄|_ |_|_|と i |___|__|_| |_| しーJ
誰だヘンリーってw
ビルゲイツ(本名William Henry Gates III)だろ
362 :
デフォルトの名無しさん :2007/11/23(金) 14:32:39
Win32でメニューバーの色を取得したいのですがどうすればいいのでしょうか?
getsystemmetrics
DWORD menu_color = GetSysColor(COLOR_MENU);
365 :
362 :2007/11/23(金) 14:49:42
366 :
デフォルトの名無しさん :2007/11/23(金) 15:31:59
ツリービューをダブルクリックでは開閉させたくないんですが、 どういう方法をとればいいんでしょうか。
368 :
デフォルトの名無しさん :2007/11/23(金) 17:13:30
サブクラス化してダブルクリックのメッセージを捕まえてreturn 0;をすればおk
>>368 やってみます。
ありがとうございました。
すでに起動してるアプリケーションに文字列をSendMessageするにはどうすればいいのでしょうか? FindWindowをしてWM_APPのLPARAMに文字列を乗せて送信してみたところ 誤ったポインタが届いてしまいました
WM_COPYDATA
ポインタを別プロセスに送っても無意味
>>371 かファイルマッピングを使う
テキストファイルから複数行の文字列を取り出し リストビューに表示させるにはどうしたらいいですか?
アトムくんじゃダメなの?
>>373 そりゃテキストファイル開いて、読んで、リストビューコントロールにに登録すりゃいいんでない?
複数のBMPを結合して4GBytes以上のAVIファイルを作成するには どうしたらいいですか? できればVideo compressorも使いたい。
どのように登録すればいいんですか?
まずパソコンの電源を入れます
入れました。
そしてスタートボタンをクリックします
>>373 これって、リストビュー1つのアイテムに複数行表示させるってこと?
ならオーナードローかな、LVS_OWNERDRAWFIXEDあたり
>>383 いえ、
テキストファイルから一行ずつ項目を追加したいです。
うるせーばかどっかいけ
リストビュー使うのにリストビューアイテムの追加の仕方なんて 人に聞くことじゃないでしょ。。。 調べろ禿で終わり
あなたがここに書いたとおりに実装すればよい ただし、そのために何のどのような設計が必要かを検討する さらにそのために何のどのような設計が必要か検討する これを繰り返す。 言語や実装方法依存しない設計であること、この繰り返しで疑問の余地がなくなるまでコーディングを開始しないことが重要 これが完了すればコーディングなんて一瞬で終わるし、再コーディングなんて手戻りはまず発生しない
ここでのレスを参考に分割ウィンドウ作っていたんですが スクロールバーってオーナードローできないんでしょうか? 境界線を自力描画したせいか普通に置くと 境界線がスクロールバーの下をくぐるんです
コーディングして実際に確認しないと、言語や実装方法依存しないことが確認できない。 理論だけで集結するなら、実験をする科学者はいない。 太平洋で核実験をする国もない。
>>388 クライアントに直接書かずにウインドウを作ればいい。
ReadLinesToListviewItems()
フックについて詳しく書かれた書籍はありますか? ネット上の情報ではあまり身につかないと思うので・・
すべてを詳しく網羅したものはない
Advanced Windows かなあ
フックなんて大して覚えることねーだろ MSDNの説明読めば各フックが呼び出される状況は把握できるし そしたらあとは自分で応用方法を考えるだけ
APIフックかも知れんよ?
>>395 あの分厚いやつですね
本屋でちょっと覗いてこよう
399 :
デフォルトの名無しさん :2007/11/24(土) 15:51:48
タブコントロールをCreateWindowで作成する際に、 TCS_RIGHTJUSTIFYを指定しているのですが、タブが最大まで拡大されません。 どういう原因が考えられますか?
400 :
デフォルトの名無しさん :2007/11/24(土) 18:34:22
マイクロソフトヘルプのhxsファイルはテキストなどに変換できませんか?
401 :
デフォルトの名無しさん :2007/11/24(土) 18:36:30
純正以外のgrepツールや全文検索のインディックスを作りたいんですが htmlに変換することも難しいです シェアでABC Amber HxS Converter というのがあるんですが日本語無理で、まとめて変換も出来ずつかえません
純正とは?
403 :
デフォルトの名無しさん :2007/11/24(土) 19:02:25
MSDNライブラリをインストールすると入っているMicrosoft Developer Networkが純正ツールです
s_hIml = ImageList_LoadImage(hInstance, MAKEINTRESOURCE(IDB_HEADER), 7, 0, CLR_DEFAULT, IMAGE_BITMAP, LR_LOADTRANSPARENT); Header_SetImageList(ListView_GetHeader(s_hListView), s_hIml); このようにして登録しておいたリストビューのヘッダのImage(14 x 6)を切り替えようと以下のような関数を作りました。 ところが何度呼び出しても切り替わってくれません… 一体全体どこが間違っているのでしょうか? BOOL SetColumnState(void) { HWND hHeader = ListView_GetHeader(s_hListView); int i; for(i = 0; i < Header_GetItemCount(hHeader); ++i) { HDITEM hdi = {HDI_FORMAT | HDF_IMAGE}; Header_GetItem(hHeader, i, &hdi); if(hdi.fmt & HDF_IMAGE) { hdi.iImage = 1; return Header_SetItem(hHeader, i, &hdi); } } return FALSE; }
すみません自己解決しました hdi.maskに入れないといけないんですね 1時間も悩んでたのになんてこった…
簡単なウェブブラウザ作りたいんですが、何から手を付けたらいいかわかりません。
おまいが作るまでも無い。既存のもので充分だ。 ちなみに、下手なウェブブラウザ作るとw3c厨に命を狙われるから覚悟しとけ。
>>406 独自レンダリングはどこからやっても簡単にはならないだろうなw
IEコンポーネント使っていいならIEコンポーネントの使い方から調べたらいいなじゃないかな?
>>407 目の前の人に厳しくなるってのは、自分の足が引っ張られるからとか、正当化のための理由は確かにあり得ると思うんだけど、こういうアカの他人に厳しい人ってのは、どういう倫理感を持ってるんだか、おれには非常に不思議だ。
下手に穴のあるもの作られて それが原因でウィルスやワームばらまかれて 結局は足を引っ張られることになってる 一番低能で一番迷惑な連中がMSの糞ソフト
windows使わなきゃいいじゃん
自分は使わなくても世間が使うとその割合が増えて ウィルスがそっちから流れ込んでくるだろ 最近はやったSARSみたいに 自国だけ閉鎖しててもどうにもならんのだよ おれはWindows使わないっていうスタンスで 影響受けずに済むのは ヒッキーだけ
>>413 目の前の人に厳しくなるってのは、自分の足が引っ張られるからとか、正当化のための理由は確かにあり得ると思うんだけど、こういうアカの他人に厳しい人ってのは、どういう倫理感を持ってるんだか、おれには非常に不思議だ。
415 :
デフォルトの名無しさん :2007/11/24(土) 21:45:37
417 :
407 :2007/11/24(土) 21:50:03
アカの他人に厳しい人って、まさかと思うけど俺のことじゃないよね? 単にコピペネタなのかもしれんが。
>>413 mac使えば良いんじゃない?
感染のリスクは比較的低いと思うよ
>>413 macなら、ウィルスが流れ込んで来ても、
たいていはWin用だから、せいぜい自分は感染せずに済む
>>417 お前の同僚がお前のために作ったツールが穴だらけなのは迷惑かもしれないが、
赤の他人が勉強のためか、vectorに登録するためか、もしくは仕事で作ったのかしらないけど、
彼がどの程度のものを作るのかわかってもいないうちから足を引っ張ろうとするのは倫理的にどうかと思うぞ。
お前に直接迷惑がかかるわけじゃないし、
仮に彼一人が作るのをやめたところで全体的には大して変化はないだろう。
それどころか彼の向上意欲やチャンスすら奪ってしまうことになりかねない。
お前は彼に責任を取れるのか?
文句を言いたいなら実際に迷惑を被った場合だけにしろ。
(゚Д゚)ハァ?
子ウィンドウをWM_LBUTTONDOWNで親ウィンドウの下に置いて WM_LBUTTONUPで親の上に戻そうと思ってSetWindowPos()を弄ってるんですが もしかして親ウィンドウの下に子ウィンドウを置く事はできませんか? 全然下がらなくて困っています
424 :
デフォルトの名無しさん :2007/11/24(土) 23:45:33
>>416 どういう事でしょうか?
hTabCtrl = CreateWindowEx(0, WC_TABCONTROL, NULL,
WS_CHILD | WS_CLIPSIBLINGS | WS_VISIBLE | TCS_RIGHTJUSTIFY,
100, 100, 400, 100,
hwnd, (HMENU)HTABCTRL, GetModuleHandle(NULL), NULL);
こんな感じで指定するのではないですか?
そりゃLVGS_***ったらGroupItemのスタイルだろ常考 コモンコントロールからの通知はWM_NOTIFYとLVN_***のはず
C言語スレか推薦図書スレか買ってはいけない書籍スレで聞け
なんでこの程度の質問にも答えていただけないのですか? しかも何故命令口調? あなたに命令される覚えはありませんが?
スレタイ嫁よ白雉
スレ違い
いや
>>428 は凄く親切だと思うぞw
普通ならスレ違いの一言で切って捨てられる所を
適切な質問先を示してるんだから。
>>427 良書だよ
VC++版とあわせて両方かっとけ
434 :
427 :2007/11/25(日) 13:28:26
なんで
>>429 みたいな成りすましがいるのこのスレ
お前らだまされてるの?
それともだまされてるフリしてんの?
鳥が付いてるわけでもなし なりすましかどうかなんて誰も分からん
436 :
427 :2007/11/25(日) 14:04:24
なんでわからないの?
438 :
427 :2007/11/25(日) 14:17:09
俺が本物だ
439 :
427 :2007/11/25(日) 14:31:13
そもそもTCS_RIGHTJUSTIFYって #define 0x0000 だった希ガス
コンソールで GetKeyboardState を実行しても戻り値は成功になりますが 引数バッファには結果は何も押していない状態になります。(もちろん色々押しています) ただ GetKeyboardState の直前に GetKeyState( 0 ) を実行すると GetKeyboardState は正常な値が取得できます。 関数説明を見てもさっぱり挙動が理解できません、、 そもそも GetKeyboardState はコンソールで使用できないのでしょうか?
441 :
427 :2007/11/25(日) 14:52:09
GetKeyboradStateもGetKeyStateも メッセージキューが所有する仮想キー情報からキーの状態を取ってくる メッセージキューはスレッドがUSER32.DLLに属するAPIを最初に呼び出した時に作成される したがって初めにGetKeyboradStateを呼んだときは キューが作られた直後なので仮想キー情報は真っ白
442 :
425 :2007/11/25(日) 15:23:32
>>426 いや、コードから開閉したいんじゃなくて、開閉できるスタイルに設定したいんです。
>>425 の画像のソフト以外で見たことないし自前でやってるのかな?
>>441 ありがとうございます。
説明不足でないですが、上記処理は何度も実行するループ部分でして
GetKeyState を入れるか入れないかで、
GetKeyboradState の動作がかわるのが、わけがわからないのです。
どちらもメッセージキューが必要ということは、
やはりコンソールではどちらも使用してはいけないのでしょうか?
_getch だと処理が止まってしまうので回避をしたいのが目的です。
GetAsync〜の方を使ってみたら?
446 :
425 :2007/11/25(日) 15:57:42
>>444 コンソールで入力街に入るのを回避したいなら
_kbhitでチェックしてから_getchが常道かと
448 :
デフォルトの名無しさん :2007/11/25(日) 17:14:34
>>437 おぉありがとうございます。TCS_MULTILINEも指定しないと無視されるようですね。
また一つ勉強になりました。しかし、
>>439 を見て調べたのですがTCS_RIGHTJUSTIFYは
0x0000と定義されてました。これって指定できないということなんですかね???
いくら
>>424 のようにしても、TCS_RIGHTJUSTIFYはあってもなくても変わりませんよね?
0と論理和とっても変化なしですしね・・・どうすれば・・・
449 :
440 :2007/11/25(日) 18:17:38
>>445 同時キーや引数をいっぱい変えて GetAsyncKeyState を実行しまくるのが非効率でしたので
GetKeyboradState が理想でしたが、いろいろ無理そうですので素直に諦めます。
>>447 _getch よりも Get〜による同時押しも欲しかったのですが
いろいろ問題ありそうですんで諦めます 。
アドバイスありがとうございました。
>>448 デフォルトでそういう動作っていう意味だろう
452 :
425 :2007/11/25(日) 20:55:11
>>450 表示の切り替え(アイコンとか詳細とか)が必要なんです。
何とかならんかなぁ
>>452 予め自分でデータを持っておいて、ListViewがクリックされた時にその位置に挿入/削除して
擬似的にツリービュー的な動作を再現すればいいと思うが。
ネットで見かけるTreeListViewのサンプルとかがそういう事をしている。
454 :
425 :2007/11/25(日) 21:10:19
う〜ん、そうするしかないようですね。
或いは詳細表示の時だけTreeViewに切り替えるとか。
456 :
デフォルトの名無しさん :2007/11/26(月) 02:09:51
比較的大きなドキュメントを読み込むときに、一気に読み込まず、一定のサイズごとに シーケンシャルに読み込んでいくプログラム、例えばIE、でデータの読み込みにしたがって 右側のスクロールバーのスクロールボックスの大きさが小さくなっていく ああいう動作はどうやって実現してるんだ? スクロールバーの操作や、つまみ(スクロールボックス)のサイズの調整はできるんだが 読み込み中はスクロールバー自体が消えたようになってしまう。 ファイル読み込み(例えば256Byteずつ)のループ { ファイルの読み込み処理 行数を調べて SetScrollInfo関数で、新しい範囲の設定 } これでスクロールバーは更新されるはずなんだが・・ダメだ ファイル全体の読み込み処理の終了の後、ウィンドウ全体を再描画させるとスクロールバーも出現する。 ちなみにクライアント領域の右側につく(WS_VSCROLL)、標準スクロールバーの話です。 SDK
>これでスクロールバーは更新されるはずなんだが されねえよw それだとループしてる間はWM_PAINTが発生しないから再描画されるわけないだろ 手っ取り早いのは副スレッドで読み込みとスクロールバーの設定をしてInvalidateRectする そうすればメインスレッドは滞りなく再描画する
>>456 ウインドウメッセージを処理してやらなきゃ駄目だよ。
普通はマルチスレッド化、どうしてもスレッドが嫌ならループ内に
メッセージ処理を組み込む。
RDW_FRAME RDW_UPDATENOW SWP_DRAWFRAME 辺りでぐぐれ
それだけならDispatchMessageはさむだけで良さそうだけど 副作用出てくるような操作するときはマルチスレッドにするべき
こんな時間に何してんだお舞ら
質問に回答してるだけだが、何か?
464 :
456です。 :2007/11/26(月) 05:27:46
一応、副スレッドでの読み込みでも同じようにやってみたけど×だったorz
>>457 スマソ
書き忘れた
SetScrollInfo();
InvalidateRect();
UpdateWindow();
と、きちんとやってるんだが
もちろんファイルから読み込んだ内容は順次表示されていく
だけど、スクロールバーが消えてしまう
で、これがなぜかわからない
一応ループ部分のソース(つっても分かりにくいと思う。)
do{
ZeroMemory(lpTemp, CHUNK_SIZE);
bRet = ReadFile(hFile, lpTemp, CHUNK_SIZE, &dwRead, NULL);
lstrcat(lppms->lpString, lpTemp);
iLines = StrChrCount(lppms->lpString, TEXT('\n')) + 1;//行数の取得
SendMessage(lppms->hwnd, WM_MY_SETRANGE, 0, (LPARAM)iLines); //メインスレッド内にある、ウィンドウプロシージャに範囲の設定の指示
//LPARAMで範囲の最大値を渡してる
InvalidateRect(lppms->hwnd, NULL, TRUE);
UpdateWindow(lppms->hwnd);
Sleep(100);
}while(dwRead && !lppms->bKill);
465 :
デフォルトの名無しさん :2007/11/26(月) 05:28:24
で、主スレッド内でのメッセージの受け取り case WM_MY_SETRANGE: si.fMask = SIF_RANGE; si.nMin = 0;; si.nMax = (int)lParam; SetScrollInfo(hwnd, SB_VERT, &si, TRUE); return 0;
スクロールバーに再描画送ってない
スレッドがスリープなりして使用権を返却していない。
仮想リストビューにアイテムを追加するときは LVN_GETDISPINFOメッセージを監視して自分で追加していくのは解るのですが どうやってLVN_GETDISPINFOメッセージを発生させるのでしょうか? 通常のリストビューのようにListView_SetItemでいいのでしょうか?
アイテム数をLVM_SETITEMCOUNTで設定すれば 画面の更新が必要になると勝手に飛んでくる
ある自作メインアプリケーションに「ログイン」の機能を持たせ、 それを起動している最中は他の自作アプリケーションが そのログインユーザの情報にアクセスできるようにしたいと思っています。 (メインアプリケーション終了時にログインユーザの情報も消す) そうなると、メインアプリケーション内のログインユーザの情報を アプリケーション間で共有できるようにしなければいけないとは思うのですが、 このようなグローバルな情報はどのように共有するものなのでしょうか。 感覚的には、「OS内で唯一のインスタンスがあって、みんなでextern参照」 といった使いかたをしたいのですが、 Mutexみたいなものを使って実現できるものなのでしょうか。 なにかよいサンプルなどがあれば、教えていただけると嬉しいです。 よろしくお願いいたします。
ファイルマッピングオブジェクト(メモリマップトファイル) データが短いならグローバルアトムで十分
473 :
471 :2007/11/26(月) 12:37:48
>>472 情報ありがとうございます。
両方調べさせていただきました。
メインアプリケーションのプロセスに聞きに行くのではなく、
各アプリケーションがそれぞれ任意のタイミングで
「メインアプリケーションがどこかにセットした現在のユーザ情報」を
自分で見に行くという動きを考えているので、
メモリマップトファイルよりはグローバルアトムのほうが
それに適した実装ができそうですかね。
こっちの方法を勉強してみようと思います。
>[メインアプリケーションがどこかにセットした現在のユーザ情報」を >自分で見に行くという動きを考えているので、 >メモリマップトファイルよりはグローバルアトムのほうが >それに適した実装ができそうですかね。 たぶん逆 その用途ならメモリマップトファイルの方が楽 アトムだと中身にアクセスするには生成した識別子(=一定ではない)を SendMessageか何かで他のプロセスに渡さなきゃいけない メモリマップトファイルは名前(=一定の値)でカーネルオブジェクトを呼び出せるから 何かを渡したりとかは必要ない
475 :
471 :2007/11/26(月) 12:56:12
>>474 アトムの識別子って決めうち文字列じゃなかったんですね。
一時的なレジストリみたいなものだと勘違いしてました。
間違った方向に進むところでした。ありがとうございます。
>>470 なるほど
数だけ教えてあげれば勝手にやってくれるんですね
解決できました、ありがとうございました
>>475 ちなみにその「一時的なレジストリ」を使って実現してもいいんだよ
478 :
425 :2007/11/26(月) 13:15:48
>>463 情報サンクス。でもLVGS_COLLAPSIBLEの値がわからないです。
誰か分かる方います?
479 :
425 :2007/11/26(月) 13:17:14
てかvista以降って書いてない?
480 :
471 :2007/11/26(月) 13:27:29
>>477 レジストリだと、実行中にレジストリエディタで簡単に書いたり消したりできますよね。
もちろんアトムやメモリマップトファイルでも、
本格的にセキュリティ対策するならそのまま使うわけにはいかないでしょうけど、
OS付属のエディタで読み書きできてしまうことくらいは避けておきたいなと思いまして。
>>479 じゃあVista以降なんだろう。残念だな。
482 :
425 :2007/11/26(月) 13:40:42
そうなんでしょうね、諦めます。 で、次の質問なんですが、ListViewでマウスホイールが回転されたことを取得したいんですけど、 サブクラス化するしかないですよね?
他にも方法はあるけど、サブクラス化が一番楽でコストも低いような
484 :
425 :2007/11/26(月) 13:54:04
おk、サンクス
リソースファイル (*.rc) をコンパイルしてリンクしたか?
>>486 ご指摘のように
リソースファイルをプロジェクトに追加するのを
忘れていたのが原因だったようです。
表示するようになりました。ありがとうございます。
文字列置換や文字列検索に使える関数ってSDKにない?
検索や置換のダイアログの表示なら FindTextやReplaceTextで可能です。
>>489 ありがとうございます
FindTextとReplaceTextについて調べてみよ
デバッガAがDebugActiveProcessでプロセスBにアタッチした後、 デバッガCがデバッガAのアタッチを強制的にデタッチして プロセスBにアタッチしなおすことって、出来るんでしょうか? その過程の間、プロセスBは停止したらダメ、という条件で。 ちょっと分かりにくいですが、要するにデバッガAをデバッガCに 差し替えてしまうことができるか、ということです。(AはCに ついては何も知らないプログラムなので、連携した動作は ありません) デバッガAを強制的に終了するとプロセスBも終了してしまう ようで、一見すると不可能っぽいのですが。OSは2000〜Vista です。よろしくお願いします。
492 :
491 :2007/11/26(月) 20:11:58
すみません、上げさせてください。 あと、「プロセスBは停止したらダメ」というのは、ようするに 終了は不可と言うことで、ブレーク状態になるのは構いません。
XP以降ならDebugActiveProcessStopってのがある。
495 :
491 :2007/11/26(月) 21:14:53
教えてもらったので早速実験してみました。
WinMain(){
DebugActiveProcessStop(GetCurrentProcessId());
:
:
:
}
ってやってデバッグ実行開始したら、デバッガ(VC8)が
外れると期待したのですが、外れずにそのまま下に
行っちゃいました。
もしかしてDebugActiveProcessStopはデバッグ対象じゃなくて
デバッガのプロセスIDを渡すのかしら? それとも自プロセスが
デバッガから強制離脱することはできない…?
あるいはDebugActiveProcessを呼んだあとに、そのプログラムが
デバッグ対象を切り離す用途で使うのかも。それだと
>>491 の
外部からのデバッガの差し替えはできませんね。
憶測ばかりで申し訳ないですが、このAPI、ググっても細かい
ところがよく分かりませんでした。
497 :
デフォルトの名無しさん :2007/11/26(月) 22:30:55
ある特定のトップレベル・ウィンドウを、最前面に持ってくるのってSetWindowPos関数? ほかにも何かいい方法ありますか?
498 :
491 :2007/11/26(月) 22:30:58
>>497 BringWindowToTopはどう?
500 :
497 :2007/11/26(月) 23:48:53
>>499 トン
これもいいな
コードがすっきりした
表に持ってきたウィンドウの再描画が完了したのを検地したのを知る方法ってある?
タイマーで1秒くらい待ってから、ってやってるけどエレガントじゃない
FindWindow
502 :
デフォルトの名無しさん :2007/11/27(火) 04:34:26
プログラムの実行中に、ウィンドウが常に最前面に表示されるようにウィンドウスタイルを変更したいです。 SetWindowLong(hwnd, GWL_EXSTYLE, GetWindowLong(hwnd, GWL_EXSTYLE) | WS_EX_TOPMOST); SetWindowPos(hwnd, 0, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED); うまくいきません。助けてケロ
てかWS_EX_TOPMOSTが付いてれば後ろに引っ込んだりしないだろ …他にWS_EX_TOPMOSTを持ってるウィンドウがなければ
>>502 なんでそこまでいっておいて、SetWindowPosを調べないんだ?
SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE);
これだけでいい。
SetWindowLongはいらない。
SetWindowLong入らない?
XPの制限ユーザー上で実行するとはProgramFiles以下に書き込めません。 Vistaではこのようなファイル操作はVirtualStoreにリダイレクトされるようです。 実際のプログラムで設定ファイルを保存する場合は、 実行されたパスが読み書き可能なものであるか? Yes→実行されたパスに書き込み No↓ ユーザーディレクトリ(AppDataなど)を取得し、そこに書き込み このような動作が必要だと思います。 これをどのwindowsでも確実に動作させるにはどのようなAPIを使えばいいのでしょうか。
>>505 CreateWindowExの段階でWS_EX_TOPMOST付けてるなら要らないと思うけど
>>506 常にユーザディレクトリに書けばいいやん
>実行されたパスが読み書き可能なものであるか? Yes→実行されたパスに書き込み この考えがそもそも間違い ユーザーディレクトリに置くかレジストリを使用すべき
共用というのであれば、それなりのアクセス権もってAll Usersに置けばいいし。
どうしてもやりたければOSのバージョンを取得してやればいいんじゃね
>>500 InvalidateRectしてからUpdateWindowすればWM_PAINTが完了するまで待てるけど
あれって他プロセスのウィンドウに使えたかな?
WH_CALLWNDPROCRETを見てればWM_PAINTの処理が終わったかは分かる こんなことでフックするなんて蛇足にも程がある気がするけど
この場合、InvalidateRectが無くてもいいでしょう。 UpdateWindowだけで再描画されなくても、WM_PAINTは抜けてるって事だし。
インストールせずにスタンドアローンで使うことを想定しているのですが、 万が一ユーザーがProgramFiles以下に置いた場合でも正常に動作させられるようにしたいのです。
ユーザーがProgramFiles以下に置いた場合でも置かない場合でも、 常にユーザディレクトリに書いとけばいつでも正常に動作する
だったらなおさら、どこに配置されようとAppDataを使うべきだろ System32に入れる奴だっているかもしれないんだし(もっともXP以前ならそこでも読み書きできるが)
>>515 たぶん、あなたが言いたいそれを「スタンドアローン」とは言わないと思う。
Readme にでも注意書きを書いておけば、わざわざ Program Files に
配置するスキルがあるユーザなら、意味をくみ取ってくれるんじぇね?
専用のインストーラ・アンインストーラを設けないなら、 ユーザフォルダやレジストリに情報残すと削除がめんどいってのは同意するけども。
>>515 気持ちは分かるけど、妙な俺様仕様を作らないほうがいいよ。
OSが推奨する共通の方式に従ったほうが
安全だしセキュアだし管理しやすいし将来の互換性も期待できるし
結果ユーザにとっても使い勝手が良いから。
521 :
デフォルトの名無しさん :2007/11/27(火) 17:35:43
>>503-505 レスありがとう
解決した。
だけど、SetWindowPos に指定するフラグで、HWND_TOPMOSTはドキュメントに載ってるが
HWND_NOTOPMOSTはヘッダー見て初めて知った
最前面化:SetWindowPos(hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
最前面化解消:SetWindowPos(hwnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
でOKだた
そういやexeあるフォルダのの下にファイル作るプログラム、そのままVistaでちゃんと動いてるなと思って ファイル探したら、ユーザーの下のVirtualStore\Program Files (x86)\xxx の下にできてたわ。 勝手にマッピングしてくれるみたいだな。
>>520 MSが互換性に気をつけると思っているのですか
実際気をつけてるよ
GetSysColorBrush(COLOR_***)の結果と、HBRUSH(COLOR_*** + 1) って使用上で何か違うの?
>>524 なぜIEとFirefoxでは表示が異なるのですか?
Firefox の仕様準拠度が低いからだな
>>527 GetSysColorBrush はブラシのハンドルが返る
HBRUSH(COLOR_*** + 1) ってのは、WNDCLASSEX 構造体のメンバーに入れてると思うが
これはRegisterClassExを呼んだ先でインデックスかブラシのハンドルか判断して
内部でGetSysColorBrushに相当するものを呼んでるだけだろう。
+1なのはインデックス0とNULLを区別するためだなw
FillRectとかでHBRUSH(COLOR_*** + 1)入れても動くよな?
>>529 違います。
IEの独自仕様のためですよ。
違います 仕様が曖昧だからですよ
IEの仕様解釈がおかしいのは認めるが、Firefoxも解釈おかしいよ
>>532 えーと実際に Firefox で Acid2 とか試したことありますか?
536 :
デフォルトの名無しさん :2007/11/27(火) 19:55:09
ある文字列(改行含む)から、最長行の文字数を返す関数ってあります? UNICODE/ANSIどっちでも対応できるもので、マルチバイト文字もうまく扱ってくれるもの 前に便利な文字列操作関数っていうサイトを見た希ガスるんだけど、見つからん
>>536 Win32API に、ですよね。
そういう関数はありません。
指定したフォルダにあるファイルのファイル名を全て取得する関数ってありますか?
>>540 FindFirstFile FindNextFile FindClose
542 :
デフォルトの名無しさん :2007/11/27(火) 20:13:54
>>539 そうです。 >>538 別にAPIになければ、APIじゃなくてもいいです。 自作するのはちょtっとミリなので
>>541 ありがとうございます。貴方のおかげで道が開けまんた。
>>542 なぜ自作するのが無理なんだ?
int line = 0;
int maxlen = 0;
int i = 1;
while (fgets(s, ...)) {
int len = strlen(s);
if (maxlen < len) {
line = i;
maxlen = len;
}
i++;
}
こんな感じでどうにかなるだろ。
>>542 size_t maxCharsInLine(LPCTSTR p)
{
size_t maxLen = 0;
size_t len = 0;
while (*p) {
switch (*p) {
case 0x0d: case 0x0a:
len=0; break;
default:
if (maxLen < ++len) maxLen = len;
}
p = (LPCTSTR) CharNext(p);
}
return maxLen;
}
546 :
鈴木 :2007/11/27(火) 20:41:03
164 名前:鈴木[
[email protected] ] 投稿日:2007/11/27(火) 13:12:56
MiniDumpWriteDump をつかって、Dumpを出力しているのですが、
どのようにしてファイルの中身は見れるでしょうか?
>>546 よう鈴木、こないだ貸した5000円返せよ
548 :
鈴木 :2007/11/27(火) 20:43:36
>>531 そうなのか。
それも内部でブラシ取得してるんだろう。
ハンドルかインデックスかは、上位ワードが
0かどうかを見てる気がする。
質問です。 windowsで流れているサウンドをフックすることは可能でしょうか? もし方法があれば、調べれば良いポイント・キーワードなどを教えていただけないでしょうか。
そういうことを質問する前に最低限、 録音プログラムぐらいは作ったことがあるんだろうな?
>>551 Windowsでサウンドプログラミングの経験があります。
>>550 「サウンドをフックする」っていうのがわからない。
途中で加工したい?
それとも覗ければ(キャプチャできれば)十分?
audio 関連の filter driver を書けばいいと思うんだけど、
Vista 以前の OS だと色々なパスがあって面倒だと思う。
特定のアプリが対象なら話は遙かに簡単になるけど。
>>553 > それとも覗ければ(キャプチャできれば)十分?
はい、覗けるだけで十分です。
加工して戻すということは想定していません。
>>552 録音するプログラムを組んだことがあるのか無いのか聞いているんだが、ニホンゴワカリマスカ?
>>555 録音するプログラムを書いたことがあります。
558 :
デフォルトの名無しさん :2007/11/27(火) 21:42:21
新規質問です。 Beep関数で、XPでは音が出るもののVistaでは音がでません。 プログラムはVisualStudio2005のC++でコンパイルしています。 VistaではBeep関数を使えないのでしょうか?
>>558 MessageBeep を使ってみてはいかが?
>>558 マザーボード上の内蔵Beepデバイスから出ているのなら、
物によってはマザーボードからスピーカーに繋げなければ音が出ない。
XPだと逆にドライバがなかったから、サウンドデバイスから出力されていただけでは?
そもそもAPIとは何の関係もない。
561 :
デフォルトの名無しさん :2007/11/27(火) 21:48:06
>>559 確かに、MessageBeepは使えますが、自由にメロディを設定したいのでBeep関数が使いたいのです。
>>561 PlaySoundでwavを鳴らせばいいだろ
>>554 DDKを使って、カーネルモードのフィルタドライバを書いてオーディオドライバの
上側のAPI(のようなもの)をフックすることになると思います。
この「オーディオドライバ」ってのが色々あるのがXPまでのOSでの難点・・・
http://www.microsoft.com/whdc/device/audio/wdmaud-drv.mspx Vista からは UAA (Universal Audio 何とか) に統一されてるんだけど。
セキュアオーディオパスってのがあって、DRM処理された音源の再生時には
署名されていないフィルタドライバは割り込めなかったような気もする。
そうして僕の知るところ、これをやってる例は聞いたことがない。
オーディオカードの出力から入力へループバックする方が遙かに簡単だから。
特定のアプリが対象で、どんなAPIで鳴らしてるのか見当が付くなら、
単純なAPIフックで実装できるわけですが。
リダイレクトに相当するものを録音するだけ。 ドライバを作る必用もなければ、APIをフックする必用など微塵もない。
サウンドカード(デバイス)が対応してればそれが一番簡単でしょうね。
リアルタイムでエフェクトでもかけたいんでね?
用途が分からんがDirectShowでキャプチャで十分な希ガス
サウンドデバイスをフックしてDRM解除するソフトでも作りたいのだろ
>>566 お前は他人の話を聞かない奴だとよく言われるだろ。
570 :
sage :2007/11/27(火) 22:45:54
録音はwaveInXXXで実装できるが、何らかの音が鳴り始めた瞬間というのは、 ユーザーモードでは特定できないはず。 しかし、WAVEデバイス指定のmciSendCommandやwaveOutWriteをAPIフックしたとなれば、 それを期に録音を開始することで再生バイトを取得できるかもしれない。 これらの関数には、MM_MCINOTIFYのような再生終了の通知メッセージがあったから、 メッセージフックでそれを取得すれば録音終了のタイミングも図れるのではないだろうか。 デバイスオープンの関数が通知を指定していないのであれば、 その関数もフックして通知フラグを立ててしまえばいい。
今時waveOutってのもなぁ〜 DirectSoundかASIOだろ
>>570 そんな余計なことを考え無くったって受け取った音声データ自体をみれば、
音が鳴っているかどうかなんて判断できるだろ。
そもそも再生の開始のタイミングを受け取りたいなんてどこに書いてあるんだ?
録音終了のタイミングが知りたいなんてどこに書いてあるんだ?
再生バイトの取得が必用なんてどこに書いてあるんだ?
通知フラグを立てる必用があるなんてどこに書いてあるんだ?
>>571 DirectSoundはVistaでHALが廃止された過去の技術
ASIOは応答速度と引き替えにCPU負荷が上がる上、
ミキサーなどの機能制約がある使う場所を選ぶ技術
知っている用語を出したいんだろうが、頭が悪すぎる
VistaがDirectSoundのHAL捨てたのはCPUパワーが上がってきたのと、 一部に狼藉ドライバがあったからで、過去の技術と言うほどじゃない。 それを言うならwaveOutの古さってどうよ?
waveOutが古くないなんて誰も言っていないが、妄想が酷いんじゃないか?
>>575 横から悪いが、
あんたちょっと黙ってたほうがいい気がするよ。
誰にでも難癖つけてるようにしか見えない。
>>573 何を勘違いしてるのか知らんが、今時waveOut系を使ってるプレーヤーなんてほとんど無いから
waveOut系をフックしてもあまり意味無いだろって言ってるのだが。
578 :
550 :2007/11/27(火) 23:42:01
なるほど、いろんな関数をフックしないといけないようですね。 だとすると、やはりフィルタドライバを作ったほうが抜本的な方法なのでしょうか。
>>577 デフォルトでASIO経由再生するプレイヤーの割合の方が遙かに少ないが、
いったい何を言ってるんだ?
>>578 だから何が目的なのかもっと具体的に書けよ
>>579 お前は人の揚げ足を取るのが趣味なのか?
お前ら勝手に盛り上がりすぎだろ
>>581 >今時waveOut系を使ってるプレーヤーなんてほとんど無いから
>waveOut系をフックしてもあまり意味無いだろって言ってるのだが。
といってASIOを挙げている時点で支離滅裂なんだが、
いったい何を考えているのか不思議でしょうがない。
そこに対する回答はないのか?
585 :
550 :2007/11/27(火) 23:51:31
>>580 PC1で鳴っている音をLAN経由でPC2に送りたいんですよ。
PC1とPC2にはスピーカーとマイクが接続されていて、
サウンドデバイスは一つしかないと仮定します。
>>584 DirectSoundはどうした?
VistaでHALが廃止されたからって何が問題なんだ?
587 :
570 :2007/11/27(火) 23:54:31
すまない。 自分が余計な事を言ってしまったがために話が盛り上がってしまった。 要は、waveInで登録したバッファの中身を解析すれば、音が鳴っているかどうかを判定できるということだったんだ。
588 :
550 :2007/11/27(火) 23:54:48
PC1,PC2にそれぞれ一つのサウンドデバイス、という意味です。
>>585 そのPCにはリダイレクトに相当するものはないのか?
>>585 WindowsMediaEncoder をインストールするだけでいいよん
すでにあるものをわざわざ作る必要はなかろうもん
>>586 HALのサポートが期待できなければ、別の技術に置き換わっていくというだけの話。
で、DirectSoundの件に関しては答えたから、今度はASIOを挙げた理由を答えてくれよ。
593 :
550 :2007/11/28(水) 00:00:48
>>589 その機能を使った場合、PC1に接続されているマイクは独立して使えるのでしょうか?
594 :
550 :2007/11/28(水) 00:02:21
>>590 使用感はESounDのwindows版のようなものを想定しているのです。
>>593 マイクから音が拾いたければ、データの取得先をマイクに切り替えろよ。
596 :
550 :2007/11/28(水) 00:04:07
GnomeのESounDはアプリケーションがESounDに合わせて作らないといけないところが違いますけれど。
>>592 あんたは勝手にwaveout使えばいいじゃん
DirectSoundやASIO使うやつにいちゃもんつけずにさ
盛り上がりすぎだw 俺も混ぜろバカチン共w
次回のテンプレにフックの話厳禁を入れておいた方がいいんじゃないか? 安易にフックに頼りすぎる上に、いつも話がろくな事にならない。
>>592 >>570 に対してwaveOutだけフックしても鳴ってる音全てをキャプチャできんよって言っただけだが
どうやらお前は570ではなくて、技術に拘った結果waveOutをマンセーしてるだけの変人だと分かったからもういいよ。
>>597 で、ASIOを挙げた理由は?
何も考えてなかったんなら後付で
>今時waveOut系を使ってるプレーヤーなんてほとんど無いから
>waveOut系をフックしてもあまり意味無いだろって言ってるのだが。
とか理由をでっち上げずに、正直に理由はないけどASIOと書きたかっただけだと言えばいいのに。
どうせ逃げ回るだけでASIOを挙げた理由を答えることも無いのは分かってるよ。
ごめんね、ちょっと苛めすぎたよ。
>>601 waveOutをマンセーしているとか、そう思いこみたいのは勝手だが、妄想にも程がある。
どこにそんなことが書いてあるんだ?
604 :
597 :2007/11/28(水) 00:12:54
>>602 ASIOなんぞ挙げてませんよ?
今までのやり取りを見てて感じただけだ
>>602 は?今時のプレーヤなら大抵DirectSoundもASIOもサポートしてるだろ
その上で
>>577 や
>>601 の意味で言ったのだが、何か問題でもあるのか?
606 :
550 :2007/11/28(水) 00:15:30
>>605 実際の所、ASIOをサポートソフトはけっこう限られてくるよ。
もう誰が誰かすら分からんが、 さすがに「今時のプレーヤなら大抵ASIOもサポート」は無い
これからもASIO厨とwaveOut厨の喧嘩が続きそうだな
Windows Media PlayerでASIO使えるの?
少し夜風に当たって頭冷やしてこい
ASIOを舐めたらどんな味ぉ?
ASIO = Advanced Serial IO
614 :
550 :2007/11/28(水) 00:26:33
>>600 音を送る側:クライアント
実際に音を鳴らす側:サーバ
というようにしたいわけです。
つまり、たくさんのクライアントに向けて音を送りたいわけではなく、
一つのサーバに向けて音を送りたいのです。
>>614 だから録音デバイスから普通に音を拾えよ
それを好きなだけ送れ
実際にやってみてそれでダメだったらまた来い
ASIOは入力用だっつーの
ふっくできるよ! できるよ! って自分の技術に奇妙な自信を持ってるから、スレがカオスになるのではないかと予想
>>614 上にも出てるけどWindows Media エンコーダでできないか?
>>618 前にも思ったが、プログラミングのスレで既製品を進めてどうするんだと
>>616 ミキサーを通さないから音質が上がるということで、
出力用に愛用している人間は少数ながらいる。
検索すると音質が上がったと喜んでいる人間がたしかにいる。
しかし私には同じ音にしか聞こえない。
>>619 大抵はそれで済んでしまうことが多いから
まあ本人がそれでも0から作りたいっつーなら構わんが
>>620 ボリュームパスして大音量で再生されただけだろ
あほすぎる
623 :
550 :2007/11/28(水) 00:38:47
>>623 ここはプログラム板だから、ソフトの使い方は別の板へ逝け
サウンドカードのサウンドバッファが16bit以上をサポートしているなら音質は上がるかもしれない 128kbpsのmp3で満足するオレには分からんレベルだ
626 :
550 :2007/11/28(水) 00:57:15
>>621 私も既製品で済むに越したことはないと思うのですが、
目的に合うものがないので作るしかないと思ったのです。
>>623 WindowsMediaEncoder
PortForwarder
sshd
これを組み合わせると可能
>私も既製品で済むに越したことはないと思うのですが、 ちょwwwwwww ソフトウェア板でやってよwwwwwwwwwwwww 何のために100レスも消費してたんだwwwwwwwwwwwww
629 :
550 :2007/11/28(水) 01:14:19
>>628 肝心なのは、直接目的に合うものが存在しないということですよ。
単に探し足りないだけ、解説を読み足りないだけだと思う 現に出来るだろ
提示されたアプリについてまるで調べてないってのは分かるなあ〜
明らかに
>>623 なんてレス読んで脊髄反射で聞いてるよね。
要するに
>>550 はESounDみたいなサウンドサーバ/クライアントが作りたいんだろ
WindowsMediaEncoderだとストリーム配信みたいなことしかできないわな
>>629 多くのオーディオデバイスでは、リダイレクタ(ミキシング済みの音声出力を取り込める入力)が
使えるので、それを waveIn 等でとってくれば簡単に目的の処理が可能です。
(USB オーディオ等だと無いのが普通みたいだけど)
ESound のようなものを作るのなら遅延はたぶんあまり許容できないでしょうから、
Windows Media Encoder 等ではなくシーケンス番号付けて RTP で送るのが良いと思います。
>>593 リダイレクタを使う実装では PC1 の wave 入力を利用することになるので、PC1側のアプリでは
MICは利用できなくなります。PC1 に ASIO 対応の余分なオーディオデバイスを追加し、
それでPC1の(通常の)出力を取り込むなどできれば非常に簡単ですが、ハードの追加は
ダメなんでしょうか?
XP向けにフィルタドライバを書くのは恐らく非常に大変ですよ。
リモートデスクトップ接続、ってオーディオリダイレクタを 標準装備してるよね?
もうほっとけよ。 どうせWindowsMediaEncoderだって試してもいないだろうし。
>>636 WindowsMediaEncoderは役にたたんだろ。
638 :
デフォルトの名無しさん :2007/11/28(水) 03:34:58
単純な質問で悪いけど ウィンドウを不可視状態で作成するのって、CreateWindowのウィンドウスタイル引数に WS_OVERLAPPED ^ WS_VISIBLE でよかったっけ? なんか見えるんだけど・・orz 「^」って排他的ウンタラだったよね?よね?
どうせShowWindow(hWnd,SH_SHOW);してるとかそういうオチ
WS_OVERLAPPEDはWS_VISIBLEを含んでない件 つまり WS_OVERLAPPED & WS_VISIBLE → 偽 なので WS_OVERLAPPED ^ WS_VISIBLE = WS_OVERLAPPED | WS_VISIBLE
641 :
デフォルトの名無しさん :2007/11/28(水) 06:17:14
すまん >WS_OVERLAPPED ^ WS_VISIBLE = WS_OVERLAPPED | WS_VISIBLE これわからん こんなのあり?
0^1 = 1 1^1 = 0
>排他的ウンタラ 排他的論理和ですが何か? きみのやりたいことはこっちではないかな? WS_OVERLAPPED & ~WS_VISIBLE
>>641 わからんならWS_OVERLAPPEDだけ使え
故意に明示したいなら
WS_OVERLAPPED & ~WS_VISIBLE
こうじゃないか
かぶってしまった
珍子がかぶってる
もし最初から最後まで表示する気が無いなら、WS_OVERLAPPEDも 指定するだけ無駄だな。
TotalRecorderみたいなことがしたいのか?
>>546 デバッグ情報はデバッガで読み込めば良い
>>650 ESound みたいな使い方には既存のストリーミングサーバは
Windows Media Encoder は遅延が大きすぎて使えないってだけだろ。
VNC のアドオンでも作ってるんじゃねーの。
リモートデスクトップでのオーディオのリダイレクトみたいに、
フィルタドライバじゃなくてそれ専用の仮想デバイスを作っちゃう手もあるな。
>Windows Media Encoder は遅延が大きすぎて使えないってだけだろ。 だれもそんなことはいっていない。 >VNC のアドオンでも作ってるんじゃねーの。 だれもそんなことはいっていない。 >リモートデスクトップでのオーディオのリダイレクトみたいに、 >フィルタドライバじゃなくてそれ専用の仮想デバイスを作っちゃう手もあるな。 リモートデスクトップで確認してみれば自明だが、DirectSoundで音楽再生でもしようものなら音がとびまくる。 だれももいっていないことを勝手に想定したり、使い物にならない手段を提示したり、 いったい何がしたいんだ?
>>652 リモートデスクトップで音がとぶから仮想デバイスが使い物にならないだなんて飛躍しすぎだろ
>>652 質問者自身が ESound みたいなのを作りたいって言ってるジャンw
逆に
>>650 は質問のどこを見てプロトコルに関する質問だと思ったの?
学習困難児だった?
655 :
デフォルトの名無しさん :2007/11/28(水) 12:38:37
漏れが華麗に要件をまとめた
(1) ESounD のようなリダイレクタ
(2) 同時にMICも使いたい
(3) 取ってきた音は1つのサーバに送って、サーバで鳴らす
(2)があるから、入力を占拠する「音源ボードのリダイレクタ(+WME)」はダメ。
マイクロソフトの人間は仮想デバイスを使ったが、
>>652 が否定してるから
仮想デバイスはダメ。フィルタドライバは
>>634 が否定してるからダメ。
まだこのネタ続いてるのかよw おまいらもういいだろww
質問者を置き去りにして外野が騒いでるのは滑稽だな 外野といってもあーだこーだ言ってるのは一人か
仮想デバイス作ればいいやん。 音飛びするのは帯域が足りてないだけかと。
659 :
デフォルトの名無しさん :2007/11/28(水) 15:23:53
>>550 に関しては、お前ら
1. windowsで流れているサウンドをフックすることは可能でしょうか?
2. もし方法があれば、調べれば良いポイント・キーワードなどを教えていただけないでしょうか。
1. Yes or No
2. if( 1. == Yes) 調べれば良いポイント・キーワードを教える
これだけ、答えればOK
余計な詮索、アドバイスせずにこれだけ答えてやれよ。俺俺妄想レスするなよ
HeapFreeしたときの戻り値が1404673とかなんだけど これは何の数値?
なんだろうね メモリアドレスではないみたいだからヒープハンドルかなんかかな 調べてないけど
>>662 調べてよ!
気になってよるしか眠れない!
寝れるならいいじゃない
昼寝したいのにー
666
____ / \ / \ / \ ネット社会の闇を見ました / (●) (●) \ | (__人__) | ________ \ ` ⌒´ ,/ | | | ノ \ | | | /´ | | | l | |
ウィンドウサイズ変更時に、 一瞬背景色で描画され ちらつくのですが、回避する方法は何かありませんか?
669 :
デフォルトの名無しさん :2007/11/28(水) 19:29:46
>>643-644 そうでしたorz
&と|は良く使うので、間違わないんだけど^と~は滅多に使わないのでごっちゃになってた
トンクス
670 :
デフォルトの名無しさん :2007/11/28(水) 19:31:15
>>649 そもそもデバッガが何のために付いてるのか良く分からん
使い方も分からんし
>>668 WNDCLASSのhbrBackgroundにヌルブラシを設定する
WM_ERASEBKGNDでTRUEを返す
~はかなりよくつかうだろ
ビットフラグを削除する時に使うね。
>>670 デバッグするために決まってるだろ
普通、開発はデバッグ版でして、バグがなければリリース版だろ
デバッガという名前なんだから勝手にバグを直してくれればいいのに 使えねーな
だったらバグのあるプログラムを書くんじゃねーよ下手糞とデバッガが仰ってます
この流れ好きだなぁw
そうか?
679 :
デフォルトの名無しさん :2007/11/28(水) 21:15:17
タスクバーの右側に 「ネットワークケーブルが接続されていません」とか「ワイヤレスネットワークに接続しました」 とか状態が表示されていますが このネット接続の状態変化を監視するAPIを教えてください
GetIFTable?
>>680 そんな感じです。ただ今回は変更の検知をしたいのでこれは使えません
MSDNみたらGetIFTableの近くにNotifyAddrChangeというのがあったのでこれを調べて見ます
ありがとう
IPv6のネットワークポートで接続されている機器がある時、そのアドレスがLinkLocalであった場合に 付加するスコープIDの取得の仕方を教えてもらえないでしょうか。 IP Helper関数のGetAdaptersAddresses()を使って取得できる値のいずれからしいということは わかったのですが、列挙される構造体のうち、どれが目的の値か特定できません。
hWndとhDCとDIBの関係がいまいちよくわからないんだけど、わかりやすく説明されてるサイトとかない?
ウィンドウにWS_EX_LAYEREDを設定し、32Bitビットマップを読み込み下の様にUpdateLayeredWindowを実行しましたが、 ウィンドウが消えてしまい、うまくビットマップを適用させることができません。 どこがおかしいか、何方か教えて頂けないでしょうか。 ReadFile(hFile , &bmpFileHeader , sizeof (BITMAPFILEHEADER) , &dwBytes , NULL); bmpInfo = (BITMAPINFO *) malloc (bmpFileHeader.bfOffBits - dwBytes); ReadFile(hFile , bmpInfo , bmpFileHeader.bfOffBits - dwBytes , &dwBytes , NULL); bPixelBits = (BYTE *) malloc (bmpFileHeader.bfSize - bmpFileHeader.bfOffBits); hdc = GetDC(hWnd); hBitmap = CreateDIBitmap(hdc , &bmpInfo->bmiHeader ,CBM_INIT , bPixelBits , bmpInfo , DIB_RGB_COLORS); hBuffer = CreateCompatibleDC(hdc); SelectObject(hBuffer , hBitmap); GetObject(hBitmap , sizeof (BITMAP) , &bitmap); wndPos.x = 100; wndPos.y = 100; surPos.x = surPos.y = 0; wndSize.cx = 300; wndSize.cy = 300; bf.BlendOp = AC_SRC_OVER; bf.BlendFlags = 0; bf.AlphaFormat = AC_SRC_ALPHA; bf.SourceConstantAlpha = 255; UpdateLayeredWindow( hWnd, GetDC( 0 ), &wndPos,&wndSize, hBuffer, &surPos, 0, &bf, ULW_ALPHA); 長文ですみません
685 :
デフォルトの名無しさん :2007/11/29(木) 00:01:28
freeしたポインタをfreeしたらどうなりますか?多分よくないですよね? freeされたかどうかを調べる関数とかってないですか?
>>683 HWNDはウィンドウ
位置を動かしたりサイズを変えたり、タイトルバーを設定したりできる
HDCは画家
ペンや絵の具を渡せば、三角形とか四角形とか円とかを描いてくれる
DIBはメモリ内の.bmpファイル
>>685 よくないです
調べる方法はありません
自分で気をつけましょう
>>684 ビットマップのイメージ本体を読み込んでないように見える
bPixelBits は malloc しただけでそのままだし
hBitmap も Create しただけで何も描き込んでないし
>>687 デバッグビルドならチェック入ると思うが
690 :
デフォルトの名無しさん :2007/11/29(木) 00:30:16
>>685 当たり前だけど、対象のポインタ変数にメモリが割り当てられてるかどうかは
ポインタがNULL番地をさして無ければいいわけだから
俺はいつも if(lpPoint != NULL) free(lpPoint) ってやってるが、もしかしたら正しくはないのかも知れん
>>686 ついでにCreateDIBSection関数が何者なのか、解説ヨロ
何度説明されても分からんけん
>>690 if(lpPoint != NULL) free(lpPoint)
これは無駄だろ
if(lpPoint != NULL) delete[] lpPoint
の場合なら意味あるけど
>>690 CreateDIBSection は指定したサイズのビットマップをメモリ内に作る。
GDI 関数で扱えるように HBITMAP ハンドルが返されるし、
その RGB 値を直接触れるように、ビットマップデータへのポインタも返される。
>>691 どっちも無駄
NULL を free とか delete とか delete[] に食わせるのは合法で、単に無視される
>>693 deleteも無駄だったのか・・・知らなかった
deleteしたあとNULL入れとくのが正解
if(lpPoint != NULL) {free(lpPoint); lpPoint = NULL;} こうするのが正解
NULLだったら無視されるんだから free(lpPoint); lpPoint = NULL; だけでいいじゃん…
699 :
デフォルトの名無しさん :2007/11/29(木) 02:02:02
K&Rにfreeで解放されたメモリ領域にfreeをかけるのは動作が規定されてないからやめとけって書いてあった希ガスよ
正しくは
>>696 のようにすべきじゃね、と思う
>>692 そういう説明は何百回も読んでるんだけど、さっぱりわかんねーよ
>指定したサイズのビットマップ ← これはデバイス独立ビットマップなのか、デバイス依存ビットマップなのか・・・
GDI関数で扱えるDDB(デバイス依存とかいう香具師)は、ビットマップのピクセルビットへはアクセスできない
HBITMAP型は通常デバイス依存ビットマップを表現するのに使われるはずだよ
なのに、ピクセルビットへのポインタもちゃんと返してくる
現にGetObjectで調べてみたら、pBitsにピクセルビットへのポインタが格納されてる
通常HBITMAP型のDDBを引数に、GetObjectやってもpBitsはNULLだよね
>>699 free(lpPoint);
lpPoint = NULL;
free(lpPoint);
と、
free(lpPoint);
free(lpPoint);
は違う。
おまいが言っているのは後者。
>>699 DDBのビットデータに直接アクセスできるわけない
大抵VRAM上にあるだろうし、DirectXじゃないから直接アクセスできてもあまり意味が無い
>HBITMAP型は通常デバイス依存ビットマップを表現するのに使われるはずだよ
お前の「通常」の基準がよく分からん。DDBで使うことの方が多いと思うが。
DIBもDDBもHBITMAPなのは、ある程度両者を意識しなくて済むようにそういう設計にしてるのか
DIBセクションが標準APIとして加わったのがwin95以降だからなのか他に理由があるのかは知らん
>>688 レス、有難うございます
>>ビットマップのイメージ本体を読み込んでいない
すみませんm(__)m
初歩的なミスに気付いていませんでした
ReadFileをもう一つ追加して見ます
703 :
デフォルトの名無しさん :2007/11/29(木) 06:31:35
>>701 >HBITMAP型は通常デバイス依存ビットマップを表現するのに使われるはずだよ
お前の「通常」の基準がよく分からん。DDBで使うことの方が多いと思うが。
デバイス依存ビットマップ=DDB
>>704 一概には言えない
lpPointがNULLの可能性が高い場合はいいが逆だと遅くなる
>>705 そこまで行くとそもそも論になるからもう止めようぜ
>>699 DIBセクションは、DIBの形でデータを保持していて、
HBITMAP経由で読み書きするときには、
その都度DDBとの間で変換が行われる。
ってプログラミングWindowsに書いてあった。
今時if文判定1個にこだわるプログラミングしてるやつがいることに驚きだわ
709 :
683 :2007/11/29(木) 10:22:06
>>686 ではなぜBitBltではDIBではなくhDCを渡すのでしょうか。
あと、DIB間での画像拡大コピーってできますか?
>>710 >>709 が解ってないのはDIBとDDBの違いではなく、DCにビットマップを選択させる概念ではないかと
DIBとDDBの違いがわかればその疑問も解決すると思うのだが
>>709 >なぜBitBltではDIBではなくhDCを渡すのでしょうか。
BitBltはDIB用じゃないからさ
DIBを直接渡すAPIはSetDIBitsToDeviceやStretchDIBitsがあるからそっちを使う
>DIB間での画像拡大コピーってできますか?
ポインタ駆使して直接ビットデータを操作しちゃえばなんだって出来る
>>700 本来は
void correct_free(void **p){
old_free(*p);
*p = NULL;
}
という設計にすべきだったんだよな
そうなってはじめて安心して
correct_free(&lpPoint);
correct_free(&lpPoint);
と書ける
その安心は半分まやかしだ ポインタ値はあちこちにコピーされうる
生成者と参照者を明確に区別して freeは生成者だけが行うようにする 参照者は使ったらそのまま放置 っていう造りにしたら安定する?
そんなあなたにshared_ptr
>>715 correct_free(NULL);
どこが安心できるんだ?
私が知っていること(onXP) ビットマップにはDDB,DIB,DIBSectionがある HDCが好むのはHBITMAPつまりDDBとDIBSection DDBはシステム領域に作られ、総量の上限がある DIBSectionはプロセス毎の2GBの中に作られる -->長時間保持する大きなビットマップ向き、メモリマップを使えば巨大なものも可 DIBSectionを選択したままCreateCompatibleBitmapを呼ぶとDIBSectionが作られるらしい DIBSectionはwin16のDIB.DRV,WinGの系統らしい DDBとDIBSection win95の頃は速度大差なし
>>719 ごめんうっかりしてた
void correct_free(void **p){
if(*p) old_free(*p);
*p = NULL;
}
correct_free(&lpPoint);
correct_free(&lpPoint);
722 :
デフォルトの名無しさん :2007/11/29(木) 15:29:19
頑張ってそんな変なもの使って何かいいことある? free には失敗しないかもしれないけど、 何時誰が free するかを管理しないコーディングスタイルじゃ 内容が必要なときに既に free されてる恐れがあるじゃん。 ちゃんと誰がいつまで内容を参照したいかが分かってれば、 それの終わりのとこで一回 free すればいいわけだし。
>>708 アセンブリでMMXやSSEで使うこのご時世に
お前が低能だって事は分かった
>>721 if(*p)
{
old_free(*p);
*p = NULL;
}
こうだろ
>>722 バカは黙ってろ
管理するに決まってるだろ
俺はマクロでNULL代入してるぞ
725 :
724 :2007/11/29(木) 16:28:36
訂正 if(p) { old_free(*p); *p = NULL; }
ダイレクト ボブサップ
>>722 今時は開放されたメモリの参照すれば例外飛んでくれるから
NULL入れる必要もないといえば無い。
それに、確保や開放を頻繁に行うなら、意識して717のいうように作るべきだと思う。
しかし、世の中の大多数の人はそのことを知らないし、やろうともしない。
結局バグの温床になっているが、なんとなく動いてしまっていて気がつかない人も多い。
特にリリース版で動くからいいやとかいうタイプの人もいるんで・・・
あと、自分の経験上、他人が書いたコードで確保と開放が入り乱れてる場合は
開放したところにNULLいれるように書き直すと、バグが良く見つかる。
まあ、こんな小手先の技使わないといけない俺の環境が悪いんだろうな。
最新のコンパイラとか開発環境、動作環境でやり、自分がコードのすべてを把握し
覚えている限りは無用のテクニックかもしれない。
>>723 最適化スレだったらその発言は甘んじて受け入れよう
だが、ここはAPIを質問するところだ
こんなところで、パイプラインの破壊気にしてもしょうがないだろ?
あああ、free論議は収拾付かなくなるので終了。 終了終了
>開放したところにNULLいれるように書き直すと、バグが良く見つかる。 嘘だろ
>>727 APIスレだろうが最適化スレだろうが関係ない
何万回、何百万回も使うならif文一つだろうが気にするべき
ジャンプ1回で済ますかpush、call、popを使うかで大違い
>>728 少なからず理解者がいてくれたようでうれしい
>>730 嘘だと思える君の環境がすごくうらやましい
世の中には信じられないことをする人が多いのです。
また、C++に対応してるんだかしてないんだかわからない
しょぼい環境も多いのです。
>>732 開放したところにNULLいれてバグるなら
NULLいれなくてもバグるだろ
>>727 そんなことで例外発生させてどうすんだよ
NULLなら処理を跳ばしてくれれば良いだけなのに
>>733 NULLいれなくてもバグってるんだけどそれは発見されない、
NULLいれたらそのバグが発見されやすい、ってことだろ
>>736 元々バグってんのか
NULL代入関係ないじゃん
ここはAPIスレだったよね? 特定の言語の話はスレ違い
ガベコレのある言語を使いましょう でこの話題は終了 ↓はい次
空気読まずに ポインタのアドレス使ったリスト管理なんかだと freeのあとNULL入れるのは必要になってくるけどな
haskellお勧め
質問なのですが、 SetLayeredWindowAttributesを使わずにウインドウのある色の部分だけ透明にすることはできるのでしょうか?
SetWindowRgn
>>727 > 開放したところにNULLいれるように書き直すと、バグが良く見つかる。
ワロタ
745 :
デフォルトの名無しさん :2007/11/29(木) 18:14:14
結局 if( p != NULL ) { free(p); p = NULL; } でFA?
どうでもいいです
ぬるぽ
if(_x_){ _x_->Release(); _x_ = NULL; }
スマートポインタ使えよ糞共
templateって方の種類分容量増えるんだろ define でいいじゃん
>>751 確かに環境によってはtemplate禁止にせざるを得ないこともある。
が、さすがにtemplateの機能をdefineだけじゃ無理だと思う。
ウィンドウクラスの登録が抜けている
>>854 PeekMessageなんか使うから100%になるんだ、GetMessage使え。
まずは猫でも分かる〜を読むべし。
>>717 >>727 COMのプログラミングすると
生成者が放置で
参照者が片付ける
みたいな感覚に染まってしまう
InvalidateRectで無効化された領域を取得するにはどうすればよいのでしょうか? 質問の背景としては、スクロールバーを動かしたとき、画面のビットマップをBitBltで 移動させることでスクロールされるようにしています。ところが、転送元の領域が 無効化された状態であった時、その領域が転送後にも再描画されず、不正な状態のままに なってしまっています。そこで、転送前に無効化されていた領域を転送後の座標系で 無効化しなおすことでこの問題を解決したいと思っているのですが。 よろしくお願いします。
>>751 組み込みスレならともかく、Win32 APIスレで言う話か?
メモリ数百MiB-数GiB、CPU数百MHz-数GHzな環境で禁止にする必要などない。
>>760 GetClipBox
PAINTSTRUCT::rcPaint
GetUpdateRect だけど。 ふつうはScrollWindowExが良きに計らってくれるんじゃないのかなー。
764 :
760 :2007/11/29(木) 21:16:46
>>763 おわっと、こんな関数があるとは知りませんでした。
まだ試してないですが、これを使えば万事うまくいきそうですね。
どうもありがとうございます。
>>762 どうもありがとうございます。
もう引っ張るなよ
別にfreeの話しを引っ張るつもりはない しかし突っ込まずにはいられないだろ
「あえていうなら、Win32APIスレでfreeの話をする辺りが。」 ってことで納得してくれよ(w
だからfreeは関係ないと
freeは本質とはあまり関係ないんだからとりあえず黙っとこうぜ。 荒らしたいというなら別だが。
馬鹿しか居ないな
以上をまとめると、HeapDestroy万歳ってことですね。
昨日はサウンド関係で荒れて今日はfreeで荒れるのか 明日は何の話題で荒れるのかな〜?
1:int *p;とint* p; 2:sizeof( char ) 3:インデント 好きなのを選べ
>>777 1 と 3 はコード整形ツールで抹殺されるから 2 しかない!
ウィンドウのシステムバーの青い部分をドラッグしたときにくるメッセージって何ですか? WM_ENTER/EXITMENULOOPは左上のボタンで出るメニューのメッセージっぽいのですが…
WM_SYSCOMMAND WM_WINDOWPOSCHANGING WM_WINDOWPOSCHANGED WM_MOVING WM_MOVE
>>778 Win32API的にsizeof (TCHAR)を使うので、このスレでは2すら話題にならない。
結局見つけました WM_ENTER/EXITSIZEMOVEでした。 お騒がせしました
CHARとかWCHARとかTCHARとか型がありすぎてわけわかんね 文字列に関してはワールドワイドなUnicodeに対応してるWCHARだけつかってればいいってこと?
いまさらハンガリアン記法でひとつ。
もうNT系しか相手にしないなら、VC8みたいにいきなりUNICODE定義しといて WCHARしか使わないという手はある。 外部入出力で結局charが要るのと、 文字列リテラルにL付け忘れることがあるのと UNCODE特有の嫌らしい概念が出てくるのが 今ひとつだけど。
数は少ないがANSI版しか用意されていない糞APIもあるけどな
>外部入出力で結局charが要るのと このときのcharで使う文字コードは何がよいのでしょうか? UTF-8? mbcs?
外部次第だろ
質問ですが、画面の解像度が変化したときに受け取るイベントというのは何なのでしょうか?
あるよ ググればすぐ出てくる
791 :
デフォルトの名無しさん :2007/11/30(金) 02:10:24
ココ見てると、みんな同じような問題で悩んでんだなってチョット思うな。 特にDIBSectionとかDIBとかDDBとか 、答えられる香具師があんまりいないんだな。 DIBセクションはDIB?をれともDDB?
WM_KAIZOUDOHENKA
>>791 DIBセクションはDIBセクションだろw
CreateDIBSection によって作成された HBITMAP 互換のGDIオブジェクト。
GetObject すると DIBSection が帰る。
>791 答え待ってないでProgramming Windows下巻読めよ
MSのドキュメント読めばわかる程度のことは答えんな。 調べる事が下手糞だといつまでたってもスキルは上がらんぞ。
796 :
デフォルトの名無しさん :2007/11/30(金) 03:37:08
DIBSection = DIB の部分 つまりDIBの一部分ってことでFA
>>796 >>791 のようなDIBとDDBの区別すらついてない人間にはその説明では不十分だ
結局はMSDN読め、に尽きるが
798 :
デフォルトの名無しさん :2007/11/30(金) 04:17:46
香具師なんて使ってる奴久しぶりにみたwww
その内「w
失敗。 まぁいいや。 800ゲッツ!
>>786 そりゃWin16との互換専用だったりして
Unicode版用意してまで延命させる必要がそもそもない
GetProcAddressはー?
DLLの仕様でシンボルにANSI文字列しか使えないから
切れちゃった DLLの仕様でシンボルにANSI文字列しか使えないからANSIでないと意味がない 無理してUNICODEにしてもANSIに変換してオーバーヘッドが出るだけ
ATLのW2Aとかの文字列変換マクロを使えるなら、オーバーヘッドは最小になるよ。 自分の場合、内部はUNICODEで処理するなぁ。
CreateWindowで作ったウィンドウの子コントロールのフォントを変更したい場合 親ウィンドウに合わせて自動で全ての子のフォントを変更することはできないのでしょうか それともこういった処理は自分で書く必要があるんでしょうか
もちろん、自分でやらないと駄目。 自動で勝手にフォント変更されたら、コントロール毎にフォントを変えることが できないではないか。
>>801 違うよImageHlpだよ
ま、こんなモン使う機会あまりないけどな
>>807 やはりそうなんですか
ありがとうございました
>>808 Platform SDKを良く読んだほうが良い
>>810 よく読むべきなのはお前な
BindImage
ReBaseImage
ImageLoad
> All ImageHlp functions, such as this one, are single threaded.
今時こんな設計の糞API揃いだが
>>811 なんだそれNT時代のAPIじゃないのか?w
そうはいうがな Windows1.0時代からあるAPIだってUnicode対応・マルチスレッド対応だぞ
1.0は言い過ぎか? 今でも使われる古参のAPIってどのあたりからあるんだろ
>>813 それだって、最初からそうだったのではなく、
Win32化されたときからじゃないか。
>>814 Win16はわからないけど、CreateWindowとか有名な関数をMSDNライブラリで引くと、
大体Minimum operating systemsがWindows 95, Windows NT 3.1になっている。
>>815 CreateWindowはWin16時代からある
そりゃまあ、WinMainからRegisterClassしてCretateWindowしての 一連の基本のやつは昔からあるけどよー
マウスキャプチャ状態にある コモンコントロールのマウスの移動を関知するには どうすればいいのでしょうか? タブをドラッグアンドドロップで移動させたいのですが 親にWM_MOUSEMOVEが飛んできません…
キャプチャしたウィンドウに飛んでこないか?
>>819 もしやサブクラス化意外に道はないのでしょうか?
通知メッセージを用意しといてくれてもいいのに…
ゲイツめぇ
だからぁ SetCapture( hwnd );で hwndに飛んでこないかと?
>>821 キャプチャ事態は自分で行っている訳ではなくて
コモンコントロールがNM_CLICKに併せて行ってくれているようで
離したときにくるNM_RELEASEDCAPTUREまでの間に
MOVEを拾えないかと思ったのです。
>>822 そりゃサブクラス化するべきなんじゃね?
タブコントロールがSetCaptureして、マウスキャプチャ状態にしてるんだけど、 その状態でWM_MOUSEMOVE相当のメッセージを親Windowで取得したい。 ってこと?
NM_CLICKでコモンコントロールはキャプチャしないだろ それにSetCaptureすればいいだろが
spyで確認したけどキャプチャしてない そもそもその手のドラッグアンドドロップは自分でマウスキャプチャして実装するもの
WM_LBUTTONDOWN If the user is clicking a button, the control redraws the button to give a sunken appearance and captures the mouse. ってMSDNに書いてあるから、ボタンの場合(TCS_BUTTONS style)はキャプチャしているんでしょ?
>>827 なるほど、だからキャプチャしてたんですね。
親で改めてキャプチャするかサブクラス化してみようと思います。
どうもありがとうございました。
TCS_BUTTONSスタイルまで確認してなかったわ
>>814 俺はWTERMの人が書いた本でWindowsプログラミングの勉強をしたが
それがたしかWindows1.0用の本で、ほとんどそのまま3.1で通用したよ。
3.1から95もAPIはほとんど一緒だから、GetMessageとかのAPIは
ずっと変わってないと思う。
だってある意味winプログラムの原点だからGetMessageの概念は
イベントドリブンはナムコが考えました
友達がいなくて 携帯メールがGetMessageできない漏れをどうにかしてください WinSockムズカシス
834 :
デフォルトの名無しさん :2007/11/30(金) 23:07:00
GlobalAllocで確保されるメモリって、自プロセス内のスタック領域?とかいうところから拾ってきてるの? ファイル読み込みで、何度かGlobalReAllocを繰り返し呼び出して、再確保を繰り返しやると 18000Byte超えたあたりで、メモリの再確保に失敗する なんでだろう
>>833 自分で自分のアドレスにPostMessageする
837 :
デフォルトの名無しさん :2007/11/30(金) 23:14:37
たしかにな
「Windowsプログラミングの極意」あるいはThe Old New Thingで いってたけど、今は、メモリ共有のために仕組みがある以外は、 ローカルヒープとあんましかわらない、みたい。
WinXP SP2だと、1Kから1バイトずつ伸ばしても全然失敗しないな…… フラグの指定がおかしいんじゃね? ちなみに可変長のGlobalヒープが欲しい時は、 CreateStreamOnHGlobal + GetHGlobalFromStream がお勧めだ。
16KBのメモリチャンク云々って話をどっかで見た気がするが忘れた。
同じくWinXP SP2、初期サイズ1KB、増加サイズ1KBずつだと4KBで失敗。GetLastErrorは8。 増加サイズが変わると失敗するサイズも変わる。法則は謎。 GMEM_MOVEABLEすればもちろん失敗しないけど。
ちょっとコード晒せ
>>816 ゲンミツに言うとCreateWindowEx呼んでるだけだったような気もするけど
HeapAlloc/HeapReAllocだとどうなる?
>>845 手元のWin16APIヘルプだと
CreateWindow(2.x)
CreateWindowEx(3.0)
って書いてあった。
取り込んだ画像を任意の角度に回転させるAPIってありますか?
GDI+
>>813 NTの最初のバージョンは3.1だが?
NTじゃないWindows 1.0がマルチスレッドやUnicodeに対応しているわけないし
GlobalReAllocで固定メモリの領域拡大に失敗するのか まさか単に断片化しているだけというオチじゃなかろうな
また随分とバックパスなw
>>850 >>813 は1.0時代のAPIだって今はUnicode版があるって言ってる
当たり前といえば当たり前
GlobalAlloc懐かしいな。
>>851 それが原因な気がするけどなー
toolhlpとかプロセスメモリエディタで覗いてみたら良いんでは
そもそもGlobalAllocなんてクリップボードとOLEドラッグ以外に使うべきでは無い どうせ猫でも見て変な知識付けたのだろうが
HeapAlloc(malloc)か、サイズが数MB超えるならVirtualAlloc使えよ。
1.xの遺物 AnyPopup();
WS_CHILDで子コントロールとして貼り付けられたダイアログって 親ウインドウが破棄されると自動的に破棄されますよね?
いいえ
DestroyWindowの解説に書いてある
はい
>>852 そりゃWin32で代わりがないAPIについてだろ。
_lcreatとかOpenFileとかにUnicode版はない
PIDLがデスクトップを指してるかどうかって、 ILGetSizeを使って2byteかどうかで判定していい?
>>865 SHGetSpecialFolderLocation(NULL,CSIDL_DESKTOP) + ILIsEqual()で判断するのが安牌
CreatePrivateObjectSecurityWithMultipleInheritance nagasugi warota
869 :
834 :2007/12/01(土) 21:48:40
こんなに大勢が答えてくれるなんてありがてぇありがてぇ コードはこうなってるが、素人なんで汚いだろうけど #define CHUNK_SIZE 1024 bySrc = GlobalAlloc(GPTR, 1); iCount = 0; dwTotal = 0; do{ ZeroMemory(byTemp, CHUNK_SIZE + 1); if(InternetReadFile(hUrl, byTemp, CHUNK_SIZE, &dwRead) == FALSE){ //失敗したら MessageBox(hwnd, TEXT("読み込みに失敗しました。"), TEXT("InternetReadFile Failure"), MB_OK | MB_ICONWARNING); return -1; } dwTotal += dwRead; bySrc = GlobalReAlloc(bySrc, dwTotal + 1, GMEM_MOVEABLE); if(bySrc == NULL){ wsprintf(szBuffer, TEXT("%d 回目の読み込みで、計%dByte(新たに%dByte)の確保に失敗しました。"), iCount + 1, dwTotal, dwRead); MessageBox(hwnd, szBuffer, TEXT("GlobaReAlloc Failure"), MB_OK | MB_ICONWARNING); GlobalFree(bySrc); return -1; } memcpy(bySrc + (CHUNK_SIZE * iCount), byTemp, dwRead); iCount++; }while(dwRead); で、そのまま強制終了になったり、運がよければ「("20回目の読み込みで、計19984dByte(新たに1024Byte)の確保に失敗しました。」みたいな感じのエラーが表示される なんでかわからん
>bySrc + (CHUNK_SIZE * iCount) とりあえずこれがだめなんじゃない? 毎回CHUNK_SIZEずつ読めてるとは限らないんだし
>>869 だからそういう目的ならmalloc/realloc使えと言ってるだろうが
>>869 >bySrc = GlobalReAlloc(bySrc, dwTotal + 1, GMEM_MOVEABLE);
同じ変数で結果を受け取ると、NULLが返ってきたときに元の領域を解放する手段が
なくなってしまってメモリリークする。reallocを使った場合も同様なので注意。
> ZeroMemory(byTemp, CHUNK_SIZE + 1); これは大丈夫なのか?byTempの宣言が書いてないから分からんが
祝 ☆ 国 取 り 1 6 0 人 到 達 ☆
何?
桂蚕糸?
XNResourceEditorって境界線の無いダイアログ作れないのかな ちゃんと設定してもどうしても境界線が残るんだが
879 :
834 :2007/12/02(日) 07:46:48
おまいらなんでこんなに優しいん? 普段ボロクソ言われてるってのに(涙 一応宣言はこうなってる BYTE byTemp[CHUNK_SIZE + 1]; static BYTE *bySrc; それから >同じ変数で結果を受け取ると、NULLが返ってきたときに元の領域を解放する手段が なくなってしまってメモリリークする の部分を改善してみた bySrc = GlobalReAlloc(bySrc, dwTotal + 1, GMEM_MOVEABLE); if(bySrc == NULL){ wsprintf(szBuffer, TEXT("%d 回目の読み込みで、計%dByte(新たに%dByte)の確保に失敗しました。"), iCount + 1, dwTotal, dwRead); MessageBox(hwnd, szBuffer, TEXT("GlobaReAlloc Failure"), MB_OK | MB_ICONWARNING); GlobalFree(bySrc); bySrc = NULL; return -1; } あと、>bySrc + (CHUNK_SIZE * iCount) の部分 を memcpy(bySrc + dwTotal - dwRead, byTemp, dwRead); としたら、すべてうまくいきました!!!!!!!!!!!!!!!うれしいっす!!! 芋くさいコードだけど、晒してよかった・・ ひとつ問題が解決すると、ほんとに気持ちがいいな ありがとうな。お前ら
FillMemoryの4バイト版ってあったりしますか
>>879 >static BYTE *bySrc;
使い方から見てstaticで宣言する意味なくね?
>bySrc = GlobalReAlloc(bySrc, dwTotal + 1, GMEM_MOVEABLE);
改善されてないじゃん。こうだろ。
BYTE *byNewSrc;
byNewSrc = GlobalReAlloc(bySrc, dwTotal + 1, GMEM_MOVEABLE);
if (byNewSrc) {
bySrc = byNewSrc;
} else {
wsprintf.....略
}
memset(buf,0,4); FillMemory(buf,4,0);
それちゃうやろw
#if defined(RtlFillMemory) #undef RtlFillMemory EXTERN_C VOID WINAPI RtlFillMemory( IN VOID UNALIGNED *Destination, IN SIZE_T Length, IN UCHAR Fill); #endif こうしておかないとダメってことか
教えてください。 自分自信のウィンドウハンドルを取得するには FindWindowとEnumWindowを使わず取得する方法ってありますか?
自分自身のウィンドウハンドルは自分で作ったんだからわざわざ取得しなくても最初から知ってるはずでは
890 :
887 :2007/12/02(日) 18:41:21
>>888 ,889
そういうのではなくてDLLでロードされたタイミングでそのDLLが
マップされたプロセスのウィンドウハンドルを取得するという作りなので
WM_CREATEとかでは無理なのです。
GetCurrentProcessId+EnumWindowsで取得という手もあるんですけど
他にやり方がないのかなと思ってレスしてみました。
因みにGetForegroundWindow、FindWindow以外のやり方でお願いします。
ねーよ
質問です このスレに女性はいますか?
たまに書く程度の女性なら、います。
>>890 プロセスにウィンドウが複数存在したらどうする?
メインプログラムで「渡したいハンドル」を保管し、
DLLの初期化ロジックに渡した方が簡単だし、確実。
>>890 おれらエスパーじゃないんだから、前の書き込みで「DLLで」とかわかるわけないだろ?
あほかw
エスパーじゃない人には聞いていません
ム板にもエスパースレあったのか
900 :
887 :2007/12/02(日) 23:00:42
注入されたプロセスのすべてのスレッドにメッセージフック仕掛ければ、大抵のHWNDはもらえる 相手によってはがむしゃらな量(種類)のHWNDが飛んでくるけどな ところでメインウィンドウって定義はあるのけ?
>ところでメインウィンドウって定義はあるのけ? だれもそんなこと言ってねえよ orz 野球終わったし寝る
DLLインジェクションっていわゆるフックとかだろ? 対象ウィンドウ(ハンドル)が分かってない状態でのそれ、ってどういう設計なんだ?
そんなに面白くはないとおもう
まあ笑いのツボは人それぞれだしな。
何が面白いのかさっぱり分からない
面白くないと思う
笑うなとは言わないよ。 ただ、あまりにも世間とずれているようなので、心配になっただけです。
それはお節介w
また笑ってる
掲示板とかでつまらんつまらんって連呼してる奴は 営業とか人付き合いの下手な人
???
>>912 私つまらんって連呼する人だけど、
このスレの主旨を考えると、正直別に笑いなんかいらんと思う。
というか害悪。
IDも出ない板で人に嫌われたって、 自分の一秒後の生活にすら何の影響も及ぼさないからな。
人に嫌われることに慣れてる人の意見だな
で 、 こ の ス レ と 何 の 関 係 が ?
>>915 おまえをみなみけの千秋だと思って萌えてやろう
それは私が至らなかったねえ
スレ違いにもほどがある。 鮫の話しようぜ
英単語一つでできてるAPI名ってSleepとGDIの描画関数いくつかの他にある?
Beep
BS_OWNERDRAWを使って外観を変えたいと思っているのですけど、 BS_RADIOBUTTONやBS_CHECKBOXと組み合わせて使えますか? BS_OWNERDRAWを使って描画を独自に実装した場合は、 ラジオボタンやチェックボックスの動作も独自に実装しなければならないのでしょうか?
AUTOならかってにやってくれるんじゃない?
>>924 BS_PUSHBUTTON〜BS_OWNERDRAWは同時に一つしか指定できないから
>ラジオボタンやチェックボックスの動作も独自に実装しなければならないのでしょうか?
これが正解
ここにいる奴は良くも悪くも貪欲で物好きな奴ばかりだよな 仕事と割り切ってるマのほうが圧倒的。
929 :
デフォルトの名無しさん :2007/12/04(火) 00:36:45
HttpQueryInfoってどこから情報をとってくるの? WEBページのサイズを取得しようとしてるんだけど、HTTP_QUERY_CONTENT_LENGTHつけてもテキストの部分のサイズしかとれない 0が返ってくるページも多いしね
HttpSendRequestしてないとかTransfar-Encodingがchunkedになってるかどちらか レスポンスの大きさを知るものであってWeb上のファイルの大きさを知るものではない
そもそも画像データや外部スクリプト、外部スタイルシートはhtml解析して別途リクエストを投げる訳で‥‥
932 :
デフォルトの名無しさん :2007/12/04(火) 19:37:01
つか、仕事だとWin32はほとんどないような気がするんだが Javaとかの案件のほうが圧倒的に多くないか?
当たり前じゃん。
SetLayeredWindowAttributesで半透明にしたウインドウを別のウインドウの上に置いて、 その上でマウスを動かすとものすごくカクカクするんですが、 考えられる原因は何でしょうか?
>>935 半透明ではない可視ウインドウにするとカクカクしないんですよ。
半透明は処理時間食いまくりんぐwwwwwww
特にWindows2000は無茶遅い
ソフトウェアカーソルだとそんなことなりそうだな 今時オンボでもそんなのあるのか怪しいけど
>>940 CPU: PentiumD920
MEM: DDR2 2GB
Graphic: Radeon7400HD
です。
マウスの影が半透明だから、 半透明に半透明を重ねようとして 大変な話になったとか?
944 :
デフォルトの名無しさん :2007/12/04(火) 21:45:46
初心者すぎる質問ですが、Win32API で作ったアプリケーションは、 Windowsでしか動かないのですか?
WindowsCEでも動かない Lindowsなら動くかもしれない
946 :
デフォルトの名無しさん :2007/12/04(火) 22:00:45
スプライト処理をしたいのですが画像の枚数が多いので 動的にマスクを作ったりBitBltを多用したりで力業状態なんですが もっと効率よく画像を重ねていく方法はありますか?
DirectDraw DirectGraphic
directXですか これ以上はすれちになりそうなので初心者スレ行ってきます ありがとうございました
>>945 リンドウス?ってリナクスにウインドウズっぽいGUIかぶせたライブドアが絡んでたOSだっけ?
Win32APIと互換性あるのかあれ
というか、キモはWINEじゃねーの。
AlphaBlend関数(だけ?)を除いて、GDIには32bppのαチャンネルなんていう概念はないですか?
レイヤーウィンドウ作る時もアルファチャンネルあるし、XP以上だとアルファチャンネルつきアイコンも出てくる。 というか、質問の意味がわからない。
BITMAPV4HEADER::bV4AlphaMask
AlphaBlendていう関数がありますがなにか
959 :
デフォルトの名無しさん :2007/12/05(水) 08:03:21
960 :
shinnichi :2007/12/05(水) 11:18:58
winsockで1対多のチャットプログラムを作ろうとしているのですが、上手くいかず困っています。 とりあえず以下のプログラムを作成して実験してみたのですが、 struct sockaddr_in addr1,addr2; struct sockaddr_in client1,client2; int len; SOCKET sock1,sock2; // 1 sock1 = socket( AF_INET , SOCK_STREAM , 0 ); addr1.sin_family = AF_INET; addr1.sin_port = htons( 12345 ); addr1.sin_addr.S_un.S_addr = INADDR_ANY; bind( sock1 , ( struct sockaddr * )&addr1 , sizeof( addr1 ) ); listen( sock1 , 1 ); len = sizeof( client1 ); sock1 = accept( sock1 , ( struct sockaddr * )&client1 , &len ); // 2 sock2 = socket( AF_INET , SOCK_STREAM , 0 ); addr2.sin_family = AF_INET; addr2.sin_port = htons( 12345 ); addr2.sin_addr.S_un.S_addr = INADDR_ANY; bind( sock2 , ( struct sockaddr * )&addr2 , sizeof( addr2 ) ); listen( sock2 , 1 ); len = sizeof( client2 ); sock2 = accept( sock2 , ( struct sockaddr * )&client2 , &len ); // 1 のときにはacceptで待機し、クライアントからコネクションすると接続され // 2 が実行されるのですが、// 2のacceptでは待機してくれません(クライアントからコネクションしなくても流れていってしまう)。 理由が分からず困っています。 どなたか解る人がいましたらご教授願います。
戻り値でどこでどんなエラーが出てるか調べてみ?
listenポート同じだからじゃ・・
>>960 エラーコードを確認しましょう。つーか、Winsockはネットワークプログラミングスレのほうが無難じゃないかな?
# 尤も、基礎を勉強してから出直せって言われそうではあるが。
964 :
shinnichi :2007/12/05(水) 11:35:22
回答有難うございます。 戻り値ではINVALID_SOCKETが返ってきています。 なぜだかわかりませんか?
最後だけチェックしてる? エラーはもっと前で起きてるんじゃない?
966 :
shinnichi :2007/12/05(水) 11:54:13
回答有難うございます。
エラーですがbindのところで起きていました。
>>962 の指摘どおりポートが同じだからエラーが起きていると思われます。
エラーの原因わかりましたので、あとは、色々試してみようと思います。
ご意見有難うございました。
内容はスレ違いだけど平和でよかた
winsockはWin32APIの一部だと思うが
>>968 >963はより適切なスレに誘導しただけだ。一部であることを否定しているわけではない。
→↓↘+P
しょぉ〜〜(ry
vc++が初めてむかついたとき: #define WIN32_LEAN_AND_MEANがなんでデフォでテンプレにはいってんだよ!! これのせいで3時間なやんじまったじゃねーか!!!!
WIN32_LEAN_AND_MEANって何を省略してるんだぜメーン?
>>974 windows.hをWIN32_LEAN_AND_MEANで検索すれば分かる事を聞くな低脳
977 :
デフォルトの名無しさん :2007/12/05(水) 18:56:38
IEコンポーネントで簡単なブラウザを作ったのですが、ブラウザ側からHTMLに変化をもたせるような命令を実行した後、 うまく変化が現れません。HTMLを表示しているウィンドウにマウスカーソルを当てた時に初めて変化が起こるのですが、 これを特にマウスをウィンドウ上で移動させる事なく変更を反映させるにはどうすればいいのでしょうか?
↓次スレよろ
980 :
デフォルトの名無しさん :2007/12/06(木) 01:13:47
書き順ソフトをつくりたいと思ってるんですが、TrueTypeフォントを序々になぞっていくようなことってどうやって実装すればいいんでしょう? 習字で筆がこう、字を書いていくような
質問ですが、 windows用の帯域制御ソフトの仕組みがどういう風になっているのか、 大まかに教えていただけませんか?
>>980 まず、書き順データを用意することから始めるんだ。 そしたら次はスレ立てだ。
983 :
デフォルトの名無しさん :2007/12/06(木) 02:15:48
>>982 立てただよ
TrueTypeってどの線をどういう順番で描くのか情報持ってないの?
「上書きしますか?」とか「終了しますか?」とかの、よく使う文章のメッセージボックスを表示させるAPIはあるんですか? いくつかの外国製の英語のソフトウェアでは、そこだけ日本語で出てくるので、気になりました。
ファイル移動にShellのAPI使ってるんじゃね? 終了しますか?はしらね
ウィンドウハンドルからそのウィンドウを所有しているプロセスのフルパスを取得するには、 どのようなAPIを使えば良いでしょうか?
989 :
デフォルトの名無しさん :2007/12/06(木) 06:26:56
>>987 GetModuleFileNameではダメ?
990 :
デフォルトの名無しさん :2007/12/06(木) 10:08:30
バックアップは・・・昨日の・・・朝9時か・・・ はぁ・・・
991 :
デフォルトの名無しさん :2007/12/06(木) 10:09:43
誤爆↑
GetWindowModuleFileName かな
____ /__.))ノヽ .|ミ.l _ ._ i.) (^'ミ/.´・ .〈・ リ .しi r、_) | この子もわしJAPAN入りや。わしが育てたる | `ニニ' / ノ `ー―i´
う
め
ま
す
ね
なんですと?!
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。