Comparar commits
1325 Commits
| Autor | SHA1 | Data | |
|---|---|---|---|
| f0080de225 | |||
| e176d09eac | |||
| 9ff14b0a90 | |||
| 1b234b6c3b | |||
| 84cfea1ac0 | |||
| 85d8d08972 | |||
| 5cf120de75 | |||
| bdf38eaf8e | |||
| 3823533c17 | |||
| fecaf92ec1 | |||
| 830dc666ad | |||
| b7951759ec | |||
| ead2c70a1a | |||
| e0016e875f | |||
| 24f60158d4 | |||
| 910642248d | |||
| 6fdb21414d | |||
| 6178c5c6a0 | |||
| e7b0c5d05d | |||
| 1140b4eed2 | |||
| 99613775b1 | |||
| 13c1a17018 | |||
| e51a82e19d | |||
| 5180a7e092 | |||
| a2bfccb15b | |||
| 7904663f14 | |||
| 69fbc85665 | |||
| 65a246f39b | |||
| 0d9bd6d96b | |||
| ed58f42176 | |||
| 626bf14b2d | |||
| 683e7351f0 | |||
| 5242a7d826 | |||
| f3a384f011 | |||
| 5267a6ddde | |||
| a9f757f39c | |||
| af1ef9330f | |||
| cf58970bdf | |||
| 4595abcebe | |||
| 4b73c277fa | |||
| 9f80a92973 | |||
| b4091b4f45 | |||
| cb714b9f8b | |||
| 0769a8e597 | |||
| 846cbb3c96 | |||
| e6d7829ca2 | |||
| 404cf22380 | |||
| 6c75db5003 | |||
| 71a8ecfd27 | |||
| 2582708b2f | |||
| 5587a8fadc | |||
| 22cb28ec50 | |||
| c4d9966709 | |||
| c69d03a74b | |||
| 38643d974b | |||
| 00308279df | |||
| 896f4b8b85 | |||
| ae1bafb39b | |||
| 3e2e7ffec7 | |||
| 46bc91fc63 | |||
| fb9e4c6262 | |||
| aa043c73e7 | |||
| 68ed3e521e | |||
| b6b3a51d32 | |||
| 7573196742 | |||
| b2e16a0ca5 | |||
| 53809b3c38 | |||
| 2549728a97 | |||
| 06fde953b1 | |||
| 21b9287cfd | |||
| eeeed87239 | |||
| 97e50d7a35 | |||
| f0195711b5 | |||
| 68ba4117f6 | |||
| dbd584d305 | |||
| e69d7fa485 | |||
| cdb4797fa3 | |||
| bd4207dfa4 | |||
| c9493636a9 | |||
| e6d76b9bc8 | |||
| 49868b8203 | |||
| 528e1bcbe9 | |||
| f0fd47dbdb | |||
| e1c2632941 | |||
| ef19ab440b | |||
| 75bb17e11f | |||
| 2c2f4bee15 | |||
| 58696f0c2c | |||
| 4130e11693 | |||
| 19de232dd2 | |||
| afb3fb6ab1 | |||
| 4dda1bcdd1 | |||
| c665f2ccb9 | |||
| 1f01a50e09 | |||
| 9cc0ce3148 | |||
| bd0425966f | |||
| 7089c83878 | |||
| 9511c34c54 | |||
| c6e9d44c7d | |||
| 3d051ecbb5 | |||
| f0ae20f0b6 | |||
| 2c83e4c22b | |||
| 07eaffd28f | |||
| 8c1f995e4e | |||
| f721075ac3 | |||
| da711cc76b | |||
| d9fb94a13d | |||
| 9da1b4528d | |||
| 768ea368a6 | |||
| 6ff34c29db | |||
| acdfd6ea20 | |||
| b9bf45ecce | |||
| b5df2c589a | |||
| dff973e9ee | |||
| 4a0644f3cd | |||
| f8d521999c | |||
| be0e5b51cd | |||
| f10c45b1f8 | |||
| 6d608dd49b | |||
| 70658a0279 | |||
| f3ceebecfd | |||
| 251eae5cac | |||
| 07b88af439 | |||
| 959616e992 | |||
| f7b2f910b7 | |||
| 4220566fb4 | |||
| 415179f9b7 | |||
| 9a9f8cbd99 | |||
| 319f6e9047 | |||
| 9b7d02618e | |||
| ed2f4d3b05 | |||
| fef81ce17f | |||
| 1942640b2d | |||
| d8232c9122 | |||
| 1a8b3b55d8 | |||
| 156d2015a5 | |||
| 8cbbb1eec8 | |||
| 351d68faf6 | |||
| 6d0651acbc | |||
| 7bd83c65f9 | |||
| dfe8862e0f | |||
| e89e70c9a6 | |||
| 8f06411357 | |||
| 011a2eaed7 | |||
| f29b2f5c51 | |||
| 1a9d2daef3 | |||
| 662f961d91 | |||
| 7e06d1ab81 | |||
| 6a22e39d4c | |||
| ff27aaffe3 | |||
| 601f1026eb | |||
| bdf59518fb | |||
| 3f7e52a4d9 | |||
| 8da7dc2e56 | |||
| b1cda9cd72 | |||
| 811d025b88 | |||
| c7e96bd3c0 | |||
| bc67864e57 | |||
| 96a4450d70 | |||
| 8591ebd55f | |||
| 16b6d591d5 | |||
| 5e3e485d4d | |||
| f7bd979d1b | |||
| 176b44fd65 | |||
| 548714343a | |||
| 8ce6297b97 | |||
| 52897e2693 | |||
| d5582d6181 | |||
| d9868285a0 | |||
| 429bed5aba | |||
| 3442e07023 | |||
| fef7e3786e | |||
| e77f69908a | |||
| c2be88fd9c | |||
| 85f8c409de | |||
| ad442d822d | |||
| bbfc36e8c6 | |||
| 136dbaa257 | |||
| b6215a24b5 | |||
| c62b73bdf5 | |||
| 2832feaa8e | |||
| f90fd1288b | |||
| 2e27312ea0 | |||
| f2b6eb5e7a | |||
| 24439832da | |||
| 89c1f7fa4c | |||
| b78eef7789 | |||
| aaa7fd0123 | |||
| 8b17879219 | |||
| 6ab495c8eb | |||
| 03be32b103 | |||
| 4218a07549 | |||
| 17a26e7dbc | |||
| 580dd76041 | |||
| 74ae45c476 | |||
| d6d99a9b6b | |||
| 3854e50e64 | |||
| a8966e8dcf | |||
| 98c7993a41 | |||
| 662763fdcc | |||
| 47211510b0 | |||
| 997ff2e7ed | |||
| 32d19f0a61 | |||
| a5ce77f5c4 | |||
| 464e03172f | |||
| d9ad71341c | |||
| 4eedc67bf0 | |||
| c96712eadc | |||
| 3b2fd06dc0 | |||
| 296b97d58a | |||
| 363db04779 | |||
| 13f2419f33 | |||
| ec9868b85b | |||
| a31faf3026 | |||
| e1fda6694b | |||
| 2fb117023b | |||
| d2a70dac78 | |||
| 18218163fd | |||
| fccab0ac15 | |||
| 02a01db39a | |||
| bd950aa654 | |||
| 32758ee8e2 | |||
| 0c79114d30 | |||
| 43b426410d | |||
| 26de4b0dd0 | |||
| 58243488fc | |||
| 489b5ddde1 | |||
| 0d0d36d599 | |||
| 2d454fb7dc | |||
| 5097ed533f | |||
| 160dee7d84 | |||
| 7395736b9f | |||
| b64c489135 | |||
| fffc3f0f7c | |||
| 5dd4e0c846 | |||
| e32ae1cae6 | |||
| 8771dce348 | |||
| 3ac6f75611 | |||
| f88d243071 | |||
| feb7b88279 | |||
| 070b47e825 | |||
| c1289c07be | |||
| e68fd9dfaf | |||
| f23a4bf9d5 | |||
| b769daec0c | |||
| 4e36f71f3a | |||
| 25db8ccfa7 | |||
| 5c2923c0af | |||
| 018ad7f2c0 | |||
| c1a7fd7267 | |||
| 3c086de42c | |||
| b48390fc1e | |||
| 136fe02333 | |||
| 5f9d100b2d | |||
| 176f3f32d4 | |||
| 2667202a3f | |||
| 245eb88b40 | |||
| d51479c357 | |||
| 7a583b1aaa | |||
| eaff9bd176 | |||
| da4d941906 | |||
| ed94e60da3 | |||
| 2fe6c956b4 | |||
| 559c7d7f13 | |||
| 6b7f2eeadb | |||
| 7bda1b3d0e | |||
| d516b01c75 | |||
| 08c579f0cb | |||
| c231069066 | |||
| ec16947808 | |||
| 2d61573175 | |||
| 507c065c0e | |||
| cf6b6299e0 | |||
| 862a746170 | |||
| 14717ce21f | |||
| 72aade4f8f | |||
| fbf75539f9 | |||
| 879402d020 | |||
| 7296f2213d | |||
| fb243c6cf5 | |||
| 20d1a720ce | |||
| ea12e0755b | |||
| 83cc22a24c | |||
| c795c80439 | |||
| edab625da6 | |||
| 9f9240391b | |||
| 4fbbc6b42a | |||
| cdbc379608 | |||
| bfeac30452 | |||
| 2e7d188afa | |||
| d291bd52cd | |||
| d8e8fd09a6 | |||
| d66471e4c0 | |||
| bb7d364f45 | |||
| f9f8474e7f | |||
| e2cac3a280 | |||
| d6b5c2c797 | |||
| c0e51cb47f | |||
| 03f054b474 | |||
| 511676e0e9 | |||
| 94ac8af162 | |||
| a814936bd7 | |||
| e42b2ca09d | |||
| 7be159d0c2 | |||
| c53c384096 | |||
| 6a52c22a02 | |||
| 6f30debd34 | |||
| d400921e17 | |||
| e95b37e5de | |||
| b9cc27c1ad | |||
| c8852f7c44 | |||
| 18b0700337 | |||
| 8d535e72c7 | |||
| 2f51fc68cb | |||
| 1f1972bf0e | |||
| e91fbd35c2 | |||
| f46c5ffc2b | |||
| a9f90b508a | |||
| 7dd96c6978 | |||
| 0c888d992b | |||
| 14da21e9f9 | |||
| 019e861539 | |||
| 79d208096b | |||
| 28c4c5fef5 | |||
| 5e211134d5 | |||
| 310e829d70 | |||
| 3d0040a183 | |||
| bbb0501f76 | |||
| 641b7aa3ad | |||
| 1572b12f75 | |||
| 689ddc493f | |||
| cb05293c11 | |||
| d5e2ee902d | |||
| b9995b2ad0 | |||
| bd243519df | |||
| f11614bc27 | |||
| 58a5185c20 | |||
| e92ff82c19 | |||
| c4c07d7878 | |||
| e07ed3082d | |||
| 5728822dad | |||
| fd13022f7c | |||
| 296eaec0e6 | |||
| 8b8672214c | |||
| 2f662bcf6d | |||
| 35f12b7027 | |||
| 719fab1ad2 | |||
| 67ffdd5168 | |||
| afc3fe3687 | |||
| 14dbeda4ed | |||
| f5ee066cc0 | |||
| ad65bcccfb | |||
| fab66d7d49 | |||
| d78c38e4e2 | |||
| 21cecef8ef | |||
| 3e8511fbc6 | |||
| 21863e190d | |||
| fb84300563 | |||
| a8de00b8e5 | |||
| 5fd52be589 | |||
| 6335fef0b1 | |||
| 3455742d89 | |||
| 6ba364f64f | |||
| 164da6cf1c | |||
| 1b6bc6342e | |||
| bde74fdccf | |||
| 6dd612162d | |||
| 2ff4d20fad | |||
| fbcd02ae6e | |||
| 6de51cdf5a | |||
| e97b1df6ee | |||
| 65d68b8d70 | |||
| f915ec7e05 | |||
| 44b4bc0cac | |||
| 2a6ac9a20d | |||
| 076298e343 | |||
| 1c3ab0f80f | |||
| a0ae2836d9 | |||
| 2309762aca | |||
| e4d89f7087 | |||
| 44c41b6faf | |||
| 8003de03ec | |||
| c5ae6a3cbb | |||
| 4581cb2f61 | |||
| 804795c5f8 | |||
| efce3ec30e | |||
| e56835fccc | |||
| 4f495756aa | |||
| 9dce43affa | |||
| 7200f90633 | |||
| 861e4cc3bc | |||
| c2c1f81ea5 | |||
| 14481ee346 | |||
| a92256bc72 | |||
| be42dda63d | |||
| 7313da6156 | |||
| b7d94d6a14 | |||
| 782b11f201 | |||
| aea387ce02 | |||
| 4ddad49369 | |||
| 224f18fef4 | |||
| 2390543445 | |||
| 473d48b39b | |||
| a947dfdac5 | |||
| b83e977839 | |||
| ab2d5a72e7 | |||
| bc5855e900 | |||
| 2c5993d680 | |||
| 2cc7fe3272 | |||
| 958ecde56b | |||
| 0a9a4c926a | |||
| a0b50515e2 | |||
| edf2dacfac | |||
| d65bd51895 | |||
| e0bd677ffc | |||
| c7123cf59b | |||
| 187fcdc2fb | |||
| a064b2a0e1 | |||
| 777406eb7b | |||
| 37f108fa51 | |||
| f0817a3e75 | |||
| 0eb9636bdf | |||
| 3f3872974e | |||
| 99533d2052 | |||
| dce035056a | |||
| 53cb504e90 | |||
| 2162f14786 | |||
| bd7fdf2438 | |||
| cc399eca28 | |||
| adb048c01a | |||
| 738900d840 | |||
| 3755747fda | |||
| 36020c6d33 | |||
| b64e24691b | |||
| a97377bb4a | |||
| b661a7ecbd | |||
| 2f3807d9a4 | |||
| 9932ce345e | |||
| b254399c02 | |||
| 5c08bfcd5c | |||
| fcd4cafe8a | |||
| cd6a1f48c8 | |||
| 2996d99914 | |||
| 785173f106 | |||
| bf66cb55d6 | |||
| 9ce2f894c3 | |||
| 436e842faa | |||
| adf4a382a3 | |||
| d4ba6b3575 | |||
| 6439e36464 | |||
| 57ded8d803 | |||
| aa5fc9b3d8 | |||
| afb3a7cc84 | |||
| e14201201d | |||
| 92b5085dd8 | |||
| 4c814e7700 | |||
| fb6d9e6908 | |||
| 1398a5764b | |||
| e66bea10d4 | |||
| 8ba666dfe0 | |||
| 882bd3dd11 | |||
| 317d41e1df | |||
| 02bd142758 | |||
| 5f2620944f | |||
| 0405f305f9 | |||
| 501dc9054a | |||
| b2c3c585db | |||
| 481010d0b3 | |||
| 4f79bd12e1 | |||
| 0bfd959bcb | |||
| d7845899b4 | |||
| 307bf2600b | |||
| 04f7f25563 | |||
| de33b60d87 | |||
| 6e0914b1c9 | |||
| f7f4b349e9 | |||
| 3c2f3115e0 | |||
| 2df1b3675c | |||
| 76f7b189fa | |||
| 8c2d495e1c | |||
| 42c9dea2c2 | |||
| c52599b6d9 | |||
| ec90593be8 | |||
| 382d0098af | |||
| 4c14dddec3 | |||
| c2ce8be50f | |||
| a7717e5933 | |||
| 9b255071f2 | |||
| 70bb54e13f | |||
| 4461ca926c | |||
| d330f19292 | |||
| b14ccb8eab | |||
| d873f6f6be | |||
| 7f0d465e98 | |||
| 7855615a9d | |||
| 9889489355 | |||
| 09b23cfc1d | |||
| 213ed15c70 | |||
| 6f7ece8603 | |||
| 5d44e011b9 | |||
| 0a190774b4 | |||
| ff3d76fd42 | |||
| 7e0a412c4f | |||
| 39e6a58604 | |||
| 853cc722a1 | |||
| 3f5023068c | |||
| ebb8e89456 | |||
| a098b44f4c | |||
| 10d1e51393 | |||
| 9bcc884276 | |||
| a044a56b1c | |||
| 59bb61a366 | |||
| f2981454cb | |||
| 39dccddb60 | |||
| 3afaa9a34a | |||
| 65f40c35a2 | |||
| 0a1ab12a8d | |||
| e1539266e6 | |||
| 7c5e60b5f4 | |||
| e72ed5eeaa | |||
| bd78c9c331 | |||
| 84d3253f86 | |||
| a09b116a9c | |||
| f351facdf4 | |||
| 2143c18459 | |||
| 8c0df63844 | |||
| 121430dac1 | |||
| 71163d3b9a | |||
| 964c5b93f8 | |||
| 6c194233a5 | |||
| 8360bf1cd0 | |||
| 3c916775ee | |||
| 5ba54ed055 | |||
| bd5b7fb376 | |||
| 05ed5c68bf | |||
| b8dd54f99b | |||
| e20d384f9d | |||
| bd63a56975 | |||
| d578b89619 | |||
| 1f10720f6e | |||
| 1ef26f6227 | |||
| 7d59645a67 | |||
| dee20f8e45 | |||
| 70e7b8f1f9 | |||
| 9e9b898452 | |||
| 4130e1972d | |||
| 1ff9c604bb | |||
| 00e3608c54 | |||
| af6bd86757 | |||
| 0952ce45c1 | |||
| 040e67b637 | |||
| cd6fe24df5 | |||
| 42d2fb8607 | |||
| 241028bbd8 | |||
| 0c58f7cb59 | |||
| 47887c1d95 | |||
| 211060eb8f | |||
| 78d9c638ba | |||
| afaf338160 | |||
| 9e9c4aeb77 | |||
| 8efc0b1f40 | |||
| 1df51398ae | |||
| cd2277cc79 | |||
| 164e6fe04b | |||
| c365ee7577 | |||
| cbc16d2a48 | |||
| 636b01b95c | |||
| 41683e76bb | |||
| 4030e1c015 | |||
| db6a8e7cda | |||
| dd93afa50e | |||
| 822d49087b | |||
| e463de8cc8 | |||
| 0c060dbaaa | |||
| 0fec165454 | |||
| 504460458c | |||
| 2fba190dde | |||
| b8fb3290b2 | |||
| 2e0c0a670f | |||
| 9473f51d7b | |||
| de857048a2 | |||
| 83ec260e09 | |||
| cbf8b37734 | |||
| e81f46ecf5 | |||
| c2089f5275 | |||
| e9da3c61c1 | |||
| 01ff3f1d86 | |||
| 931deeef94 | |||
| 5caa17a994 | |||
| ecbfaa4b2d | |||
| 0d273fefc6 | |||
| 9c4232b6e2 | |||
| 79c2aaaebb | |||
| 7141c7a612 | |||
| cd420e3e33 | |||
| ef2cc89023 | |||
| 2beeabb17b | |||
| d83dde09a7 | |||
| 3ca38481c7 | |||
| 288a5157be | |||
| f5bde32616 | |||
| bffbc30c3d | |||
| 9ca125ddc4 | |||
| df2721c0ce | |||
| f22c38bbd9 | |||
| 03e9ee321a | |||
| 961e41be26 | |||
| 1332fbbcb0 | |||
| 8325f7cd82 | |||
| 86f7b9788d | |||
| b23411bc2b | |||
| 7c43abaf4e | |||
| d7c106d08b | |||
| 95f31151ec | |||
| 198ed1ef85 | |||
| 4f17e1f142 | |||
| ff9454da44 | |||
| ea14ae85e8 | |||
| 52891f8a93 | |||
| c8f1bde8e2 | |||
| 6a6e7f862f | |||
| d52fbed05c | |||
| 322052ce65 | |||
| af18df2bc2 | |||
| 236c939132 | |||
| c411f140f3 | |||
| 3d56106b07 | |||
| fdf9bbcc31 | |||
| 65385d2ac6 | |||
| 133d956592 | |||
| 245dcb0f4a | |||
| 6b19aa7ec9 | |||
| c5cbdbb1e8 | |||
| cbf16d3f82 | |||
| df6ab34e5b | |||
| 816317b8a6 | |||
| 521aa2dad0 | |||
| 6e439ca778 | |||
| d66e9e98b7 | |||
| a3994e009d | |||
| 062afd1773 | |||
| 8d2d8086b1 | |||
| cf71299f3b | |||
| 36dad4738a | |||
| fb744c65bd | |||
| a9949b3fe0 | |||
| a72d5b473b | |||
| 201931d2f8 | |||
| c58c5260a0 | |||
| e25dcd7c5f | |||
| 04e36d1560 | |||
| 681e840d97 | |||
| 59b44d532c | |||
| 04a6806957 | |||
| 6041c067a5 | |||
| 9b9e6510ac | |||
| 489d797df5 | |||
| 9df51dd4d8 | |||
| 6ffbf31eda | |||
| 7ea92aa923 | |||
| 1d481a7050 | |||
| 76781972a2 | |||
| 2953b46a3c | |||
| aae0c47f5c | |||
| 6d83a71bdd | |||
| 7b515a7dc8 | |||
| 8c06f5762f | |||
| 1d96ae4ab2 | |||
| c1b875ff38 | |||
| 5b15ee4ae3 | |||
| 92d3c433c4 | |||
| 79ff2f7a93 | |||
| b78618dca1 | |||
| 0967615734 | |||
| 9eb51ebaba | |||
| d9c887c0d4 | |||
| 6e6d761f2b | |||
| 7865bb46ad | |||
| c6ad9adbe0 | |||
| 907e2eb411 | |||
| e1ed265df7 | |||
| 1466833fb7 | |||
| ebf08cfede | |||
| fc703cadb8 | |||
| bb69e3d099 | |||
| 08e6f64a64 | |||
| d9193f4442 | |||
| e658538926 | |||
| b55b60cff4 | |||
| ac272df5d3 | |||
| b61e701298 | |||
| 7e2f27fe42 | |||
| 078763cb92 | |||
| 2f66bb2b77 | |||
| b3de77c961 | |||
| 60184e16f5 | |||
| 3e71e6cb3e | |||
| f0b5b01a5f | |||
| 877af01713 | |||
| 39ce53e6c9 | |||
| 3d60203509 | |||
| ed3da68670 | |||
| a0cf56bdac | |||
| 26b8fad3c1 | |||
| 6f9c712b22 | |||
| b95bcb2b63 | |||
| 67fb8d11c2 | |||
| e1f846df99 | |||
| b8cba40e84 | |||
| 0d9dede3c4 | |||
| bb2888f670 | |||
| 1cb727a62a | |||
| 77419e2808 | |||
| 6b42585e82 | |||
| 2841c3aaf1 | |||
| 72871bbd4c | |||
| 697e024936 | |||
| 8c01954c50 | |||
| c7603bffa8 | |||
| 366296743b | |||
| a48f90067e | |||
| 8e6b046ee0 | |||
| fed646a207 | |||
| d76441cf71 | |||
| ee6696fdf4 | |||
| c6265c36a9 | |||
| cc5e41bf32 | |||
| 049d8386ff | |||
| af9c4e6cb9 | |||
| 1af26d22fd | |||
| f9c9e0ef41 | |||
| 06060b7dff | |||
| 6b9d964e36 | |||
| 43752710f8 | |||
| 3b7efa4e74 | |||
| c397a0a4e3 | |||
| 5a674bf44b | |||
| cea1743630 | |||
| 2666f05790 | |||
| 53822961b9 | |||
| 0574c76c4f | |||
| 6941166a71 | |||
| 34ab92f0fb | |||
| b5dbe3bb94 | |||
| 542b9c47ed | |||
| bf6a58c9b7 | |||
| a7182710cc | |||
| cd238a0800 | |||
| 3e6f098b34 | |||
| 244dd4296b | |||
| c7ef8c3223 | |||
| 34b5f2f206 | |||
| ae4c442077 | |||
| 1da72d973d | |||
| 8ef79fb6a6 | |||
| 15e8e58f67 | |||
| c082e4813d | |||
| fc2c75c7df | |||
| d033c4c5a9 | |||
| 04e4a24664 | |||
| 2a7ecd3847 | |||
| 727c8a47d1 | |||
| 37630b17c3 | |||
| d992ac54a2 | |||
| 1ec856379d | |||
| 8d43c5cabf | |||
| 0fae5813f6 | |||
| 62242cd708 | |||
| 5c758d3baf | |||
| 1f495f5fec | |||
| 9e6ebd4c8e | |||
| dd323edec4 | |||
| 53006d6ff4 | |||
| 94097d4656 | |||
| 033ef99663 | |||
| c82e2b01a4 | |||
| b25bc96eb7 | |||
| 00c79242fe | |||
| 46dac8226a | |||
| 8e919e7298 | |||
| 499b115a01 | |||
| 75c0885a5b | |||
| 1cec02f2d8 | |||
| b05e7835c6 | |||
| 62201ceba0 | |||
| 7d28dd8114 | |||
| 6d3f003133 | |||
| 167d6bcbb7 | |||
| fac681cfa2 | |||
| a1643fcdc2 | |||
| d1d7f2eb2b | |||
| 605ab234d7 | |||
| d10c7c922e | |||
| 1c82657c0c | |||
| a4a7faba40 | |||
| ffa4cc6ac9 | |||
| 0cdc7ff542 | |||
| 71de662675 | |||
| a18e453686 | |||
| 6e99ab0184 | |||
| 4b8d91084b | |||
| ed900e2b31 | |||
| e2e67eac9f | |||
| 7ce94ed58e | |||
| 57d44c3c36 | |||
| 3a86a62865 | |||
| 65d5d4303d | |||
| 8d7256ef08 | |||
| fd16cfc67a | |||
| e7bd55637a | |||
| 0f459174c8 | |||
| 1d19323026 | |||
| ed1cc99506 | |||
| f66cb26c58 | |||
| 707412d1b6 | |||
| a7ebdc5453 | |||
| dc35957f63 | |||
| 0711483bb7 | |||
| f4f5ff1887 | |||
| 33a4fa3203 | |||
| 8b22412e55 | |||
| 92d721d9d0 | |||
| 0f06d0b8ce | |||
| e321ec4c6f | |||
| 2f2892ff08 | |||
| 1dd559e80e | |||
| b7fb1b7e5a | |||
| eb60877793 | |||
| 5907ce0a02 | |||
| 2d3fb36420 | |||
| 5a1d431e51 | |||
| 0552c4a001 | |||
| 96d017869a | |||
| ddc2688af8 | |||
| baa60b6198 | |||
| 8abdddf11a | |||
| 9141018b27 | |||
| 3370fecdf2 | |||
| 30ff28e1d8 | |||
| 09f8f310f4 | |||
| 53d7b16564 | |||
| 5e91f76f0f | |||
| 557b3e1c93 | |||
| 18dd85d6cb | |||
| 74ee6ea8b4 | |||
| 2541679dbd | |||
| cbb062cc35 | |||
| 8cf8878425 | |||
| 3f65e56ccd | |||
| 24b72070c0 | |||
| d72c49e556 | |||
| 3000dc237f | |||
| 1fbf9dc44f | |||
| 90af15ef5c | |||
| 55e4a5aa15 | |||
| a0c80f279b | |||
| 8195e0e11d | |||
| 56b3f8cef0 | |||
| 28a00f61ff | |||
| 7f2ea33a80 | |||
| 92ff23e77f | |||
| 58fb8ca2df | |||
| cc3fbd975c | |||
| e449a43bbe | |||
| 71c792f51b | |||
| 7c7c9f3272 | |||
| ed62e48b95 | |||
| 17d9e9e68d | |||
| 6972a4ffda | |||
| 1833aa0fb9 | |||
| f1fb139b4e | |||
| 5cb470331d | |||
| 269deef6db | |||
| 42695e7250 | |||
| a6e56b97f6 | |||
| 747d6c32d4 | |||
| eab6e41cde | |||
| 69dbe845f4 | |||
| f498318c07 | |||
| 630b9c0ac4 | |||
| 0cad4386fa | |||
| 09cb76f264 | |||
| 2e3a48ccdd | |||
| 5e4814d992 | |||
| 5c0cc6f153 | |||
| 857fe3de46 | |||
| e2214f8adb | |||
| 1106229a57 | |||
| bc9d0be295 | |||
| 3b836249fe | |||
| a26e394061 | |||
| b8099539f0 | |||
| dc411e8f99 | |||
| 404585d134 | |||
| 19ce713188 | |||
| 89284fe55f | |||
| ba022c338a | |||
| 097e5f3924 | |||
| ed2c518d96 | |||
| 0e5843995f | |||
| 5bd2cba2c2 | |||
| 3de7eb58a7 | |||
| 41eb294ce6 | |||
| ba94f2ebe0 | |||
| 7912248950 | |||
| 5d27c255b3 | |||
| 80e86e3b83 | |||
| 3a759f1eea | |||
| a09e503f19 | |||
| da4524b05c | |||
| 1a98283709 | |||
| acca8c5ac9 | |||
| 55eabb84e4 | |||
| 5b9cd52784 | |||
| 2db72615b5 | |||
| f6ab3edc23 | |||
| cef6194628 | |||
| 90ba9fce2a | |||
| 76b3982ddd | |||
| c946f80d5b | |||
| 8d350c7d99 | |||
| 7cd7fb8d6c | |||
| b12e563340 | |||
| 9c0aadce1e | |||
| b8d538b1b4 | |||
| 0219cd71b9 | |||
| 899fcbdfcc | |||
| 79fed6e32f | |||
| 55263ca11d | |||
| fe1f4a3bac | |||
| dd4fda55b5 | |||
| 2aae506110 | |||
| aae54a6f41 | |||
| 89da58adec | |||
| 57ef003eb9 | |||
| d378a64096 | |||
| 58ac91bc10 | |||
| 97602c0bf8 | |||
| 8523c487c1 | |||
| 3580b58bf6 | |||
| 53f387b203 | |||
| 4fbcb5b5fb | |||
| 8e7652ef6a | |||
| 83038cf24a | |||
| b00ff3e98f | |||
| da2773e02a | |||
| 01d71b7bed | |||
| 19afda0069 | |||
| 9e1196444e | |||
| f38364b399 | |||
| 36849e7716 | |||
| b764162526 | |||
| a3d9aa8501 | |||
| c71480eaf8 | |||
| 9af9291b73 | |||
| 68ce0c383e | |||
| 75af086be8 | |||
| 1ac92cca9b | |||
| be72fbab29 | |||
| 70150bdf45 | |||
| 6b452bafae | |||
| 8ddac835b6 | |||
| 69043d0293 | |||
| a82e6c354e | |||
| 84e8de6e9f | |||
| 3aeecc9eb1 | |||
| 00d0b59cd1 | |||
| bda487e870 | |||
| c1d28ba8d5 | |||
| 5feacad4a5 | |||
| 10ea848900 | |||
| 9b26a4d5ce | |||
| c43fc68bc8 | |||
| df07539331 | |||
| 563931750b | |||
| 6b090de7b1 | |||
| d8863ef95f | |||
| 36f9595ce7 | |||
| d14178be4c | |||
| 48565e6305 | |||
| 3727f9583b | |||
| 4a6bbf0b3c | |||
| 7513a7157f | |||
| e7dbdb6ead | |||
| db5f101bfc | |||
| 3c06e8b6fd | |||
| 28f94cbd0b | |||
| 6f37cbd946 | |||
| 396281263b | |||
| a00e8ac201 | |||
| b1772a89c1 | |||
| 58f07ff045 | |||
| 12f99d4fc7 | |||
| 05da0a6877 | |||
| 46ce871f34 | |||
| 4b22c2f044 | |||
| 4014828eff | |||
| bc87a62d59 | |||
| f6862442d3 | |||
| bff7f57eb8 | |||
| e19024ca0d | |||
| 73997e4799 | |||
| ffa97aa438 | |||
| d08244dfd8 | |||
| 2e0d367045 | |||
| 0f1fb2e6a1 | |||
| 672e362ed8 | |||
| bcae16c441 | |||
| 19b8f5cb59 | |||
| 68b37156d8 | |||
| d9237b64c0 | |||
| 3f5b1375ab | |||
| eaf444eabc | |||
| da037b38e3 | |||
| 62f864f4ab | |||
| bf89f1d37d | |||
| 3dc986e609 | |||
| 2f5e874201 | |||
| 05291932f8 | |||
| 72aa450ecb | |||
| 926ea21fe0 | |||
| 657a077cdb | |||
| 9a90f56845 | |||
| 7d36e0d63b | |||
| 865d5ed7a1 | |||
| 9dd91ee17e | |||
| 425ea821d7 | |||
| bea5049a2f | |||
| eae1e34696 | |||
| e63b6b00bc | |||
| e5b3ed226b | |||
| d5ce354c87 | |||
| e280838989 | |||
| 2309054b1f | |||
| 9dcc44a76b | |||
| 7a417c6d3b | |||
| 425ab15ae1 | |||
| c75ff4f118 | |||
| 75d3dd19ec | |||
| 4cd556555e | |||
| 6309741522 | |||
| feebe921af | |||
| 92929308bd | |||
| ca4f14b555 | |||
| a7bcfacbd9 | |||
| e097b4820d | |||
| 566ec7974c | |||
| c735d6c420 | |||
| cf54ca9551 | |||
| 9dc9a293f3 | |||
| f2c2a4fce9 | |||
| 9f1da1b562 | |||
| f5a3dbf82b | |||
| 89f83e796a | |||
| 977a9e49c5 | |||
| 7ee0a4b39f | |||
| 4268e3a1d2 | |||
| 860b9a266a | |||
| c39d752ccb | |||
| 15db1cf385 | |||
| 38d684d1e6 | |||
| ccb1bc514b | |||
| 27c46a2c8e | |||
| ff2f1d237a | |||
| 402f4c162c | |||
| c0b69e57d5 | |||
| 81013a98b4 | |||
| 971dd622c7 | |||
| 0045d31e2d | |||
| caef8f4ebc | |||
| 6116c1ae71 | |||
| 03ecf2b0bb | |||
| d4a5005273 | |||
| 7522f29f0a | |||
| 09f0a2e4a6 | |||
| aa846929f3 | |||
| b378af7cb1 | |||
| 59a259f4d3 | |||
| 3de1eb36d3 | |||
| 8b549a487f | |||
| 005f659eaa | |||
| a5aad94f24 | |||
| 52a6926da3 | |||
| b3c0f003bb | |||
| 3d2360bc56 | |||
| 1267f51d8c | |||
| e7328001a4 | |||
| fc7b53e809 | |||
| 50637cb3c2 | |||
| 11b4203874 | |||
| 60beb432eb | |||
| 64331c9cf0 | |||
| 00088d4093 | |||
| 472f3660e0 | |||
| 3c13cc8c4d | |||
| 0792ac8eee | |||
| 4952af4ffe | |||
| 3fcca7ef56 | |||
| e93244fef2 | |||
| c3813b6d7f | |||
| 8d27f68baa | |||
| ff3cd68b8c | |||
| cadeba6cb5 | |||
| 0739e7dc00 | |||
| edfdfd2e85 | |||
| 7b7a42f221 | |||
| acf75ce7fe | |||
| 4b18d1f73d | |||
| c3042afaf3 | |||
| b0304e9679 | |||
| 2e7e03d014 | |||
| aea706c528 | |||
| 0cfe60e9d1 | |||
| 14e2e92e86 | |||
| 884402787b | |||
| 01c78756af | |||
| 7086846465 | |||
| 838d4ad920 | |||
| 7e37eaaf77 | |||
| 07cc7a3719 | |||
| 2b9be16ffa | |||
| 9458d88f67 | |||
| 6a34124175 | |||
| 39c8792ece | |||
| 1d04af52e3 | |||
| 26e9509c9b | |||
| 9c157d3215 | |||
| d22de05b0b | |||
| 1fe3dc7c20 | |||
| f7c0bc613a | |||
| c7fa2da826 | |||
| da11bece0f | |||
| e3399b11ed | |||
| 115ab36fce | |||
| f8c7a245bf | |||
| 7560b6e53d | |||
| f5346bbec2 | |||
| 41958889fb | |||
| d439a7811d | |||
| 4951c00d23 | |||
| 202cd0d45e | |||
| 1502db6095 | |||
| e8eea9e68e | |||
| 396eb9f283 | |||
| 378f400226 | |||
| 37e02dfbd5 | |||
| dce66ec8ec | |||
| 2fef67a08d | |||
| 50a17583c7 | |||
| bfe2c7df83 | |||
| b3186dde12 | |||
| 628a33eb76 | |||
| 4373e66b1e | |||
| 2e67b0ad9f | |||
| a4cbe0635f | |||
| 8563419280 | |||
| 0974bd4a90 | |||
| e1d47adc99 | |||
| ce806772f0 | |||
| dcc1f6b4f1 | |||
| 2829f5941a | |||
| cd98813de5 | |||
| e4a91de766 | |||
| 3425a763bc | |||
| 2340e7a777 | |||
| 5cbe2058c1 | |||
| c6dddbd02b | |||
| 5ffc0c3748 | |||
| e5e171d913 | |||
| 1e313227b8 | |||
| 8d45a9e0cd | |||
| 95568d76d3 | |||
| d4a3442468 | |||
| e262de22ea | |||
| bd29f83ee9 | |||
| 9474f853f8 | |||
| 49243f1891 | |||
| 1a099ba549 | |||
| 2367133b4f | |||
| c648a1933d | |||
| 598acf08da | |||
| 208a8dee90 | |||
| e9fb299565 | |||
| 0c25275ec2 | |||
| 17a514ecd0 | |||
| 39228c27ed | |||
| 5e93cc704d | |||
| b509af8959 | |||
| d57e96dc56 | |||
| b01d6d1982 | |||
| 35b6ded138 | |||
| acc46605f2 | |||
| 16d1996ed0 | |||
| 92a515c33e | |||
| e4363160ba | |||
| 1dc2781d2b | |||
| bb27735fe6 | |||
| b2a54c100c | |||
| 25723e7141 | |||
| 70758199c7 | |||
| e8bb12563f | |||
| d66a8e32c3 | |||
| 7c3b7fd6b5 | |||
| 1a2f93a8b3 | |||
| 944c95cf7a | |||
| 00fa972430 | |||
| f5179e6794 | |||
| 80e2b5a749 | |||
| 7063d9996f | |||
| bdfeb13f0d | |||
| 69205de17d | |||
| 260d513fea | |||
| 3704031875 | |||
| 8406f5f48f | |||
| 23a9e73212 | |||
| 429e37d3ad | |||
| 51e79c4283 | |||
| affcab04e2 | |||
| 59689d5522 | |||
| b13c84cf46 | |||
| 265289f679 | |||
| fb5036cd6d | |||
| 40bec108e7 | |||
| b922048fa8 | |||
| affca4b92d | |||
| 3e53d8752e | |||
| 4d92f6c8e7 | |||
| 0e185fa11a | |||
| f73986bd21 | |||
| 0208f68fe5 | |||
| 01adb0e638 | |||
| 1edd456322 | |||
| c9b5428008 | |||
| d5fa5633d5 | |||
| ac35bfc6fc | |||
| f7942975fe | |||
| 59aa6bb1bf | |||
| 45a45ab990 | |||
| 4db74cbea8 | |||
| c3e1101ffa | |||
| 7e0cc12e92 | |||
| 2d7dc885ec | |||
| a0525f03ee | |||
| 2b30dfb314 | |||
| bf41e64840 | |||
| 4d39ddee67 | |||
| d58b032b41 | |||
| 91e5478df6 | |||
| bd0768f877 | |||
| 49d345f767 | |||
| 12ac48fc79 | |||
| 6b91c41da8 | |||
| 2b59579e35 | |||
| 6cbdf3f3a3 | |||
| 1d1dc81104 | |||
| f045a2367f | |||
| 6257f07d1a | |||
| 4232af563c | |||
| 961543615c | |||
| aeb0abab87 | |||
| 77fe243556 | |||
| d4970cf452 | |||
| f0b1462f2d | |||
| 27e52f33ba | |||
| fadab28eb6 | |||
| b5e44c8dfa | |||
| f359848d1a | |||
| c30df49e15 | |||
| 675561bb9a | |||
| abc0bbf381 | |||
| e332366d15 | |||
| d420424039 | |||
| f4932dd020 | |||
| 085520ddc8 | |||
| 77175b3f72 | |||
| 2544e45a0b | |||
| 6002211b1c | |||
| ccabd2b16b | |||
| e680ecfbfc | |||
| e7ba089659 | |||
| 0cd4aa24e2 | |||
| 5826120fbd | |||
| 220aa4b27d | |||
| 1c3adc892c | |||
| 4af66bb62f | |||
| 5435965f90 | |||
| 6fdb7de0fe | |||
| bc7144b01b | |||
| e57279831e | |||
| 7247436b5f | |||
| a8b0d40ff9 | |||
| f893d22733 | |||
| 688ddfeced | |||
| f9e40776d4 | |||
| 8c1d2eb47f | |||
| 1359dfc658 | |||
| 6e2de5eee3 | |||
| 8807355af3 | |||
| f7e9f91ade | |||
| c4860de618 | |||
| c578b58314 | |||
| acdb200512 | |||
| e75be655ce | |||
| d6669a0dd5 | |||
| 4819d52b00 | |||
| 2dbf801eb4 | |||
| d170961701 | |||
| c7747d9769 | |||
| dd2aa9a8de | |||
| 4e9452abed | |||
| 6d3b2bddaf | |||
| ebc6a9c28a | |||
| 78ffc52a8b | |||
| b4d77e827d | |||
| bfb73f08fd | |||
| af8b7f037c | |||
| 334f0b0609 | |||
| 3ab5cb4a1d | |||
| d2a9eb5a8b | |||
| bc75c54bd3 | |||
| d3782ec816 | |||
| 8d8d3843c4 | |||
| 49634f3bf2 | |||
| c64a84c769 | |||
| 9813273b07 |
@@ -1,8 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<classpath>
|
||||
<classpathentry kind="src" path="src"/>
|
||||
<classpathentry kind="src" output="build.eclipse/test-classes" path="test"/>
|
||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
|
||||
<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/3"/>
|
||||
<classpathentry kind="output" path="build.eclipse/classes"/>
|
||||
</classpath>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<classpath>
|
||||
<classpathentry kind="src" path="src"/>
|
||||
<classpathentry kind="src" output="jna/build.eclipse/test-classes" path="contrib/platform/test"/>
|
||||
<classpathentry kind="src" path="contrib/platform/src"/>
|
||||
<classpathentry kind="src" output="build.eclipse/test-classes" path="test"/>
|
||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
|
||||
<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/3"/>
|
||||
<classpathentry kind="lib" path="C:/GitHub/jna-3.5.1.jar"/>
|
||||
<classpathentry kind="output" path="build.eclipse/classes"/>
|
||||
</classpath>
|
||||
@@ -0,0 +1,19 @@
|
||||
build
|
||||
build-d64
|
||||
build.eclipse
|
||||
build.number
|
||||
build.clover
|
||||
.metadata
|
||||
.DS_Store
|
||||
bin
|
||||
contrib/ntservice/dist
|
||||
contrib/platform/dist
|
||||
doc
|
||||
*~
|
||||
**/*~
|
||||
dist/*.asc
|
||||
dist/*-sources.jar
|
||||
dist/*-javadoc.jar
|
||||
dist/src-mvn.zip
|
||||
dist/out-of-date.jar
|
||||
perf*.txt
|
||||
Arquivo executável
+17
@@ -0,0 +1,17 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>jnalib</name>
|
||||
<comment></comment>
|
||||
<projects>
|
||||
</projects>
|
||||
<buildSpec>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.jdt.core.javabuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
</buildSpec>
|
||||
<natures>
|
||||
<nature>org.eclipse.jdt.core.javanature</nature>
|
||||
</natures>
|
||||
</projectDescription>
|
||||
Arquivo executável
+635
@@ -0,0 +1,635 @@
|
||||
Release 3.5.2
|
||||
=============
|
||||
|
||||
Features
|
||||
--------
|
||||
* Basic [COM support](https://github.com/twall/jna/blob/master/www/PlatformLibrary.md) for w32 - [@wolftobias](https://github.com/wolftobias).
|
||||
* Avoid superfluous Structure memory allocation by using Structure(Pointer) ctors if available - [@twall](https://github.com/twall).
|
||||
* [PR#120](https://github.com/twall/jna/pull/120): Provide methods for extracting native libraries from the class path for use by JNA - [@Zlika](https://github.com/Zlika).
|
||||
* [PR#163](https://github.com/twall/jna/pull/163): The Java `GUID` structure can be used directly as alternative to `Ole32Util.getGUIDFromString()` - [@wolftobias](https://github.com/wolftobias).
|
||||
* [PR#163](https://github.com/twall/jna/pull/163): Ported Win32 `dbt.h` - [@wolftobias](https://github.com/wolftobias).
|
||||
* [PR#163](https://github.com/twall/jna/pull/163): Added Win32 `WTSRegisterSessionNotification()` and `WTSUnRegisterSessionNotification()` from `Wtsapi32.dll` - [@wolftobias](https://github.com/wolftobias).
|
||||
* [PR#163](https://github.com/twall/jna/pull/163): Added Win32 `native_window_msg` that creates windows, registers for USB device and logon/logoff notifications - [@wolftobias](https://github.com/wolftobias).
|
||||
* [PR#178](https://github.com/twall/jna/pull/178): Added Win32 `USER_INFO_10` structure from `LMAccess.h` - [@davidmc24](https://github.com/davidmc24).
|
||||
* [PR#174](https://github.com/twall/jna/pull/174): Recompile linux-amd64 natives to remove glibc-2.11 dependencies, now requires only 2.2.5 or better - [@twall](https://github.com/twall).
|
||||
* [PR#183](https://github.com/twall/jna/pull/183): Added `StructureFieldOrderInspector` unit test utility to scan for `Structure` field issues; see: `com.sun.jna.platform.StructureFieldOrderTest.testMethodGetFieldOrder` - [@bhamail](https://github.com/bhamail).
|
||||
* [PR#187](https://github.com/twall/jna/pull/187): Allow `StructureFieldOrderTest` unit test in platform project to run on Linux - [@bhamail](https://github.com/bhamail).
|
||||
* [PR#192](https://github.com/twall/jna/pull/192): Added Win32 `SHGetSpecialFolderPath()` and initialization file (.ini) API functions from `kernel32.dll` - [@headcrashing](https://github.com/headcrashing).
|
||||
* [PR#194](https://github.com/twall/jna/pull/194): Added Unit Test for `CLSIDFromProgID()` - [@headcrashing](https://github.com/headcrashing).
|
||||
* [PR#196](https://github.com/twall/jna/pull/196): Added Win32 `RegisterWindowMessage()` and new wrapper `User32Util` for convenient use of `RegisterWindowMessage`, `CreateWindow` and `CreateWindowEx` - [@headcrashing](https://github.com/headcrashing).
|
||||
* [PR#187](https://github.com/twall/jna/pull/187): Allow StructureFieldOrderTest unit test in platform project to run on Linux. - [@bhamail](https://github.com/bhamail).
|
||||
|
||||
Bug Fixes
|
||||
---------
|
||||
* [PR#180](https://github.com/twall/jna/pull/180): Fix: added missing fields in `XEvents.getFieldOrder()` - [@xwizard](https://github.com/xwizard).
|
||||
* [PR#183](https://github.com/twall/jna/pull/183): Fix `LMAccess.GROUP_INFO_3.getFieldOrder()` to return correct fields names - [@bhamail](https://github.com/bhamail).
|
||||
* [PR#187](https://github.com/twall/jna/pull/187): Fix `getFieldOrder()` to return correct field names for some X11 structures - [@bhamail](https://github.com/bhamail).
|
||||
* Remove deprecated methods on Memory (getSize,isValid) and Structure (getSize) - [@twall](https://github.com/twall).
|
||||
* [PR#206](https://github.com/twall/jna/pull/206): Fix `moveToTrash()` on OSX to work with symlinks - [@twall](https://github.com/twall).
|
||||
* Remove problematic AWT check via `Class.forName("java.awt.Component")` (see [here](https://bugs.eclipse.org/bugs/show_bug.cgi?id=388170)) - [@twall](https://github.com/twall).
|
||||
* [PR#210](https://github.com/twall/jna/pull/210) Add OSGI processor specs for Mac OS X - [@bertfrees](https://github.com/bertfrees).
|
||||
|
||||
Release 3.5.1
|
||||
=============
|
||||
|
||||
Bug Fixes
|
||||
---------
|
||||
* Fix bug where string fields sometimes failed to be writtern - [@twall](https://github.com/twall) (roman kisluhin).
|
||||
* [PR#145](https://github.com/twall/jna/pull/145): Fix `Netapi32Util.getDomainTrusts()` returns "empty" domain object - [@aikidojohn](https://github.com/aikidojohn).
|
||||
* [PR#145](https://github.com/twall/jna/pull/145): Fix `Netapi32.getDC()` - added missing fields in `DOMAIN_CONTROLLER_INFO` - [@aikidojohn](https://github.com/aikidojohn).
|
||||
* [PR#151](https://github.com/twall/jna/pull/151): 'platform.jar' in the dist directory was not updated for release 3.5.0. (The 'platform.jar' published to maven central was correct.)
|
||||
|
||||
Release 3.5.0
|
||||
=============
|
||||
|
||||
Features
|
||||
--------
|
||||
* [#62](https://github.com/twall/jna/issues/62) If a callback is required to reside in a DLL, use [`DLLCallback`](http://twall.github.com/jna/3.5.1/javadoc/com/sun/jna/win32/DLLCallback.html) to tag your Callback object - [@twall](https://github.com/twall).
|
||||
* `Structure.getFieldOrder()` supersedes `Structure.setFieldOrder()` and is now required - [@twall](https://github.com/twall).
|
||||
* Search `~/Library/Frameworks` and `/Library/Frameworks` on OSX - [@shaneholloway](https://github.com/shaneholloway).
|
||||
* Automatic cleanup of native threads (based on suggestions from neil smith) - [@twall](https://github.com/twall).
|
||||
* Add `android-arm` target - [@ochafik](https://github.com/ochafik), [@twall](https://github.com/twall).
|
||||
* Add `jna.tmpdir` to override temporary JNA storage location - [@twall](https://github.com/twall).
|
||||
* Add `EXTRA_MAKE_OPTS` ant property to override make variables - [@twall](https://github.com/twall).
|
||||
* Add `Library.OPTION_OPEN_FLAGS` to customize dlopen behavior - [@twall](https://github.com/twall).
|
||||
* [#113](https://github.com/twall/jna/issues/113), [#114](https://github.com/twall/jna/issues/114): Add support for GNU/kFreeBSD and debian multi-arch distros - [@twall](https://github.com/twall).
|
||||
|
||||
Bug Fixes
|
||||
---------
|
||||
* Fix `Advapi32Util.registryGetValues()` tried to allocate memory for a zero-length `REG_BINARY` value - [@phailwhale22](https://github.com/phailwhale22).
|
||||
* Fix crash in direct mode callbacks with certain type conversions - [@twall](https://github.com/twall).
|
||||
* More thoroughly propagate unexpected exceptions generated in jnidispatch - [@twall](https://github.com/twall).
|
||||
* Cleanup maven poms and publishing to central repo - [@bhamail](https://github.com/bhamail).
|
||||
* [#129](https://github.com/twall/jna/issues/129): Allow `Memory` field in structure - [@twall](https://github.com/twall).
|
||||
* Preserve `PointerType` fields on `Structure.read()` if unchanged - [@twall](https://github.com/twall).
|
||||
* [#128](https://github.com/twall/jna/issues/128): Fix masking extracting DWORD upper and lower WORD values - [@twall](https://github.com/twall).
|
||||
* [#135](https://github.com/twall/jna/issues/135): Fix for `Advapi32Util.registryGetValues()` when reading zero length values - [@danwi](https://github.com/danwi).
|
||||
|
||||
Release 3.4.2
|
||||
=============
|
||||
|
||||
Features
|
||||
--------
|
||||
* Add `platform.win32.Kernel32.GetEnvironmentVariable` and `platform.win32.Kernel32Util.getEnvironmentVariable` - [@dblock](https://github.com/dblock).
|
||||
* Moved `Kernel32.dll` function definitions from `WinNT.java` into `Kernel32.java` - [@dblock](https://github.com/dblock).
|
||||
* Provide `toPointer()` methods on all `_PTR` types (platform win32) - [@twall](https://github.com/twall).
|
||||
* Provide `ant -Dskip-native` to skip platform native build - [@twall](https://github.com/twall).
|
||||
* Provide `ant -Dheadless=true` to run unit tests headless - [@twall](https://github.com/twall).
|
||||
* Added Windows dev environment instructions - [@twall](https://github.com/twall).
|
||||
|
||||
Bug Fixes
|
||||
---------
|
||||
* Ensure platform win32 classes use unsigned where appropriate (`ULONG_PTR`, `UINT_PTR`, `ULONGLONG`, `WORD`, `DWORDLONG`) - [@twall](https://github.com/twall).
|
||||
* [#71](https://github.com/twall/jna/issues/71), [#73](https://github.com/twall/jna/issues/73): Fix OSGI entries in manifest - [@twall](https://github.com/twall).
|
||||
* [#78](https://github.com/twall/jna/issues/78): Fix NPE in `platform.win32.Netapi32Util.getDomainTrusts` - [@dblock](https://github.com/dblock).
|
||||
* Fix: auto-sync memory for `struct**` arguments (array of struct pointers) - [@twall](https://github.com/twall).
|
||||
* Fix: `platform.win32.Secur32.AcquireCredentialsHandle`, `InitializeSecurityContext` and `AcceptSecurityContext` on Win32 64-bit - [@dblock](https://github.com/dblock).
|
||||
* Fix: avoid overwriting native `char *` or `wchar_t *` fields within structures when unmodified (similar to current operation with pointers) - [@twall](https://github.com/twall).
|
||||
* Fix: `platform.win32.DsGetDC.DS_DOMAIN_TRUSTS` and `DsEnumerateDomainTrusts` on Win32 64-bit - [@trejkaz](https://github.com/trejkaz).
|
||||
* Fix: Crash freeing the wrong pointer in `Netapi32Util.getDomainTrusts` - [@trejkaz](https://github.com/trejkaz).
|
||||
* [#100](https://github.com/twall/jna/issues/100): Fix `platform.win32.W32FileMonitor` - [@dblock](https://github.com/dblock).
|
||||
* Return INT_PTR from `platform.win32.Shell32.ShellExecute`, since returning
|
||||
`HINSTANCE` is useless.
|
||||
* Fix runtime error in some instances where Structure.setFieldOrder is used (never return self when sharing AutoAllocated memory).
|
||||
* [#107](https://github.com/twall/jna/issues/107): `Structure.clear()` always calls `ensureAllocated()` to avoid NPE.
|
||||
* Ensure internal memory pointer is *always* allocated when calling `Structure.useMemory()`, even if layout is not yet determined.
|
||||
|
||||
Release 3.4.1
|
||||
=============
|
||||
|
||||
Features
|
||||
--------
|
||||
* Add 'unsigned' modifier to IntegerType.
|
||||
* Add to `platform.win32.User32`: `GetLastInputInfo`.
|
||||
* Add `platform.win32.WinNT.GetFileType` and `platform.win32.Kernel32Util.getFileType`.
|
||||
* Add to `platform.win32.Kernel32Util`: `getFileType`.
|
||||
|
||||
Bug Fixes
|
||||
---------
|
||||
* Re-build linux-amd and linux-i386 against older versions of glibc (2.2.5 and
|
||||
2.1.3 respectively).
|
||||
* Properly initialize first printer info struct in winspool library.
|
||||
* Properly support getting and setting zero-array-length `REG_MULTI_SZ` values on Win32.
|
||||
* Fixed SID in Win32 `USER_INFO_23` and `GROUP_INFO_3`.
|
||||
* Fixed passing domain name into Win32 `Netapi32Util.getUserInfo`.
|
||||
|
||||
Release 3.4.0
|
||||
=============
|
||||
|
||||
Features
|
||||
--------
|
||||
* Provide `jna.nosys=true` to avoid loading any system-provided JNA (useful for local build/development).
|
||||
* Allow override of default jnidispatch library name with `jna.boot.library.name` system property.
|
||||
* Throw an Error if a system install of JNA is incompatible or if JNA's JNI library does not match.
|
||||
* Disable automatic jnidispatch unpacking with `jna.nounpack=true`.
|
||||
* Automatically look up system error messages for LastErrorException.
|
||||
* Improved callback thread-mapping support; re-use, rename, and group callback
|
||||
threads.
|
||||
* Cache structure layout results, improving performance of structure creation.
|
||||
* linux/arm 32-bit support (hardware provided by Alex Lam).
|
||||
* linux/ppc 32-bit support (hardware provided by Fritiof Hedman).
|
||||
* Preliminary linux/ia64, linux/ppc64 support (thanks to Laurent Guerby and the GCC compile farm).
|
||||
* Windows CE/Mobile support (w32ce-arm) (resources provided by andrea antonello and Hydrologis SRL).
|
||||
* linux multi-arch support (kohsuke).
|
||||
* Added REG_QWORD registry type support
|
||||
* Add to `platform.unix.x11`: `XGrabKey`, `XUngrabKey`, `XSetErrorHandler`.
|
||||
* Add to `platform.mac.Carbon`: `GetEventDispatcherTarget`, `InstallEventHandler`, `RegisterEventHotKey`, `GetEventParameter`, `RemoveEventHandler`, `UnregisterEventHotKey`.
|
||||
* Add to `platform.win32.Kernel32`: `CopyFile`, `MoveFile`, `MoveFileEx`, `CreateProcess`, `SetEnvironmentVariables`, `GetFileTime`, `SetFileTime`, `SetFileAttributes`, `DeviceIoControl`, `GetDiskFreeSpaceEx`, `CreateToolhelp32Snapshot`, `Process32First`, `Process32Next`.
|
||||
* Add to `platform.win32.Msi`: `MsiGetComponentPath`, `MsiLocateComponent`, `MsiGetProductCode`, `MsiEnumComponents`.
|
||||
* Add to `platform.win32.User32`: `RegisterHotKey`, `UnregisterHotKey`
|
||||
* Add to `platform.win32.SetupApi`: `SetupDiGetClassDevs`, `SetupDiDestroyDeviceInfoList`, `SetupDiEnumDeviceInterfaces`, `SetupDiGetDeviceInterfaceDetail`, `SetupDiGetDeviceRegistryProperty`.
|
||||
* Add `platform.win32.Shell32.ShellExecute`.
|
||||
* Add to `platform.win32.User32`: `SetParent`, `IsWindowVisible`, `MoveWindow`, `SetWindowPos`, `AttachInputThread`, `SetForegroundWindow`, `GetForegroundWindow`, `SetFocus`, `SendInput`, `WaitForInputIdle`, `InvalidateRect`, `RedrawWindow`, `GetWindow`, `UpdateWindow`, `ShowWindow`, `CloseWindow`.
|
||||
* Add to `platform.win32.Version`: `GetFileVersionInfoSize`, `GetFileVersionInfo`, `VerQueryValue`.
|
||||
* Add to `platform.win32.Advapi32`: `GetFileSecurity`, `RegQueryValueEx(...Long...)`.
|
||||
* Add to `platform.win32.Netapi32`: `NetUserGetInfo`.
|
||||
|
||||
Bug Fixes
|
||||
--------
|
||||
* Revise cleanup of in-use temporary files on win32 (issue 6).
|
||||
* Fix structure alignment issues on linux/ppc.
|
||||
* Fix structure alignment issues on linux/arm.
|
||||
* Account for NIO Buffer position (JIRA issue 185).
|
||||
* Avoid crash with very long Strings (> 150k in length).
|
||||
* Fix bug tracking Memory with an associated direct ByteBuffer.
|
||||
* Fix bug handling structs by value when type mappers are in effect (JIRA issue 188).
|
||||
|
||||
Release 3.3.0
|
||||
=============
|
||||
|
||||
Features
|
||||
--------
|
||||
|
||||
* Facilitate `Memory` subclasses (jbellis).
|
||||
* Allow multiple fields of the same type in Unions (Francis Barber).
|
||||
* Add `platform.win32.Advapi32.AdjustTokenPrivileges`, `platform.win32.Advapi32.LookupPrivilegeName`, `platform.win32.Advapi32.LookupPrivilegeValue`, `platform.win32.Advapi32.ImpersonateSelf`.
|
||||
* Add `platform.win32.Advapi32.DuplicateTokenEx`, `platform.win32.Advapi32.CreateProcessAsUser`, `platform.win32.Kernel32.GetExitCodeProcess`, `platform.win32.Kernel32.TerminateProcess`, `platform.win32.Kernel32.ReadFile`, `platform.win32.Kernel32.CreatePipe`, `platform.win32.Kernel32.SetHandleInformation` and related constants / structures in `platform.win32.WinBase` and `platform.win32.WinNT`. Please note that the `SECURITY_ATTRIBUTES` structure has been moved from `platform.win32.WinNT` to `platform.win32.WinBase`.
|
||||
* Add `platform.win32.Kernel32.DeleteFile` and `platform.win32.Kernel32Util.deleteFile`.
|
||||
* Add `platform.win32.Kernel32.GetFileAttributes` and `platform.win32.Kernel32Util.getFileAttributes`.
|
||||
* Add `platform.win32.Kernel32.GetTickCount`.
|
||||
* Add Win32 Service functions to `platform.win32.Advapi32`.
|
||||
* Add `platform.win32.W32ServiceManager` and `W32Service`.
|
||||
* Add Win32 Event Logging functions to `platform.win32.Advapi32` and `platform.win32.Advapi32Util.EventLogIterator`.
|
||||
* `platform.win32.Advapi32Util.registryCreateKey` returns `true` if key was created, `false` if it already exists.
|
||||
* Add `REG_BINARY`, `REG_EXPAND_SZ` and `REG_MULTI_SZ` support to `platform.win32.Advapi32Util` registry functions.
|
||||
* Reduce JNI crossings in a number of native methods, moving object creation out into pure Java code.
|
||||
|
||||
Bug Fixes
|
||||
---------
|
||||
|
||||
* Move all native functions into `com.sun.jna.Native`, to ensure that all dependent classes must be disposed before the `Native` class is unloaded. Note that this change is incompatible with all previous JNA native libraries.
|
||||
* Fix `platform.win32.Kernel32.GetNativeSystemInfo` and `GetSystemInfo` AV on Win64.
|
||||
* Fix several potential minor bugs as reported by TvT.
|
||||
* Fix bug in Structure.StructureSet.toString (Blair Zajac), exposed by Tomcat ThreadLocal cleanup.
|
||||
* Fix several bugs when using Structure(Pointer) ctor and array fields (Samuel Audet).
|
||||
|
||||
Release 3.2.7
|
||||
=============
|
||||
|
||||
Features
|
||||
--------
|
||||
|
||||
* Add native peer value accessors for Pointer
|
||||
* The `jna.library.path` property is now re-evaluated whenever a native library is loaded. Previously this value was cached when the JNA classes loaded.
|
||||
* `Native.loadLibrary` can now load `.drv` files.
|
||||
* Refactor `com.sun.jna.platform.win32.WINBASE` into `WinDef`, `WinNT` and `BaseTSD`, matching Windows SDK headers.
|
||||
* Refactor constants from `com.sun.jna.platform.win32.GDI32` into `WinGDI`, matching Windows SDK headers.
|
||||
* Refactor constants from `com.sun.jna.platform.win32.User32` into `WinUser`, matching Windows SDK headers.
|
||||
* Refactor `platform.win32.WinNT.LARGE_INTEGER` into a union.
|
||||
* Add `platform.win32.ObjBase`, `com.sun.jna.platform.win32.Ole32.CoInitializeEx`, `CoUninitialize`, and `CoCreateInstance`.
|
||||
* Add `platform.win32.Oleaut32.SysAllocString` and `SysFreeString`.
|
||||
* Add `platform.win32.Secur32.ImpersonateSecurityContext` and `RevertSecurityContext`.
|
||||
* Add `platform.win32.WinNT.WELL_KNOWN_SID_TYPE`, `SECURITY_MAX_SID_SIZE` and other related SID-related constants.
|
||||
* Add `platform.win32.Advapi32.CreateWellKnownSid` and `IsWellKnownSid` and `com.sun.jna.platform.win32.Advapi32Util.isWellKnownSid`.
|
||||
* Add `platform.win32.Kernel32.GetVersion`, `GetVersionEx`, `GetSystemInfo`, `GetNativeSystemInfo`, `GlobalMemoryStatusEx`, `GetLogicalDriveStrings` and `IsWow64Process`.
|
||||
* Add `platform.win32.Kernel32Util.getLogicalDriveStrings`.
|
||||
* Add `platform.win32.User32.GetSystemMetrics`.
|
||||
* Add `platform.win32.BaseTSD.DWORD_PTR`.
|
||||
* Add `platform.win32.WinBase.SYSTEM_INFO` and `MEMORYSTATUSEX`.
|
||||
* Add `platform.win32.WinNT.OSVERSIONINFOEX`, `VER` constants.
|
||||
* Add `platform.win32.WinDef.ULONGLONG` and `DWORDLONG`.
|
||||
* Add `platform.win32.Shell32.SHGetDesktopFolder` (prep work for Com4JNA).
|
||||
* Add `platform.win32.Winspool.GetPrinterInfo`.
|
||||
* Add `platform.win32.WinspoolUtil.getPrinterInfo1`.
|
||||
* Add `platform.win32.GDI32.GetDeviceCaps`.
|
||||
* Add `platform.win32.GDI32.GetDIBits`.
|
||||
|
||||
Bug Fixes
|
||||
---------
|
||||
|
||||
* Fix `ClassCastException` in `Structure.equals` (issue 152).
|
||||
* Fix bug initializing a structure object from existing memory when the structure has initialized fields (issue 133).
|
||||
* Fix NPE reading an array of string from a pointer when an element of the array is `NULL` (issue 151).
|
||||
* Avoid calling `UnregisterNatives` in native code (issue 154).
|
||||
* Compare unpacked library path against canonical (long) filename (issue 156).
|
||||
* Fix `read()` of uninitialized memory in `platform.win32.Advapi32Util.getTokenGroups` and `getTokenAccount`.
|
||||
* Fix `com.sun.jna.platform.win32.Secur32.QuerySecurityContextToken` to take a `CtxtHandle` instead of `PSecHandle`.
|
||||
* Fix definition of BITMAPINFO (platform/win32).
|
||||
|
||||
Release 3.2.5
|
||||
=============
|
||||
|
||||
Features
|
||||
--------
|
||||
|
||||
* Split code in examples.jar into a contrib platform.jar package and individual packages for demos.
|
||||
* Fix Eclipse build and added Eclipse projects for all contrib samples, import projects from jnalib and contrib.
|
||||
* Ensure Structure fields correctly ordered when inherited.
|
||||
* Use explicit Structure field whenever provided, regardless of whether the VM requires it.
|
||||
* Add Win32 mappings for two dozen functions from Kernel32.dll, Advapi32.dll, Netapi32.dll, Secur32.dll, NtDll.dll, Ole32.dll, Shell32.dll and Crypt32.dll to com.sun.jna.platform.win32.
|
||||
* Port parts of WinError.h, WinNT.h, LMAccess.h, LMCons.h, LMErr.h, LMJoin.h, NTStatus.h, ShlObj.h, WinDef.h, ShellApi.h, Wdm.h, WinReg.h, WinCrypt.h, Sspi.h, Guid.h, NtSecApi.h and DsGetDc.h.
|
||||
* Add Win32 simplified utility interfaces Kernel32Util, Advapi32Util, Netapi32Util, Crypt32Util, NtDllUtil, Shell32Util, Ole32Util and Secur32Util to com.sun.jna.platform.win32.
|
||||
* Support unicode paths in W32FileUtils.
|
||||
* Fix exception during dispose in W32FileMonitor.
|
||||
|
||||
Bug Fixes
|
||||
---------
|
||||
|
||||
* Provide String.replace for 1.4 compatibility.
|
||||
* Avoid allocating memory when Structure is provided a pointer in the ctor.
|
||||
* Ensure proper value returned in Pointer.getValue() for non-null, unchanged NIO Buffer values.
|
||||
* Use 1.4-compatible URI generation (issue 149).
|
||||
|
||||
Release 3.2.4
|
||||
=============
|
||||
|
||||
Features
|
||||
--------
|
||||
|
||||
* Make Pointer ctor public.
|
||||
* Provide access to Function objects for arbitrary Pointer values.
|
||||
* Add linux/ia64 binaries (bpiwowar). See issue 134 patch.
|
||||
|
||||
Bug Fixes
|
||||
---------
|
||||
|
||||
* Use a more robust method to decode a file-based URL (issue 135).
|
||||
|
||||
Release 3.2.3
|
||||
=============
|
||||
|
||||
Features
|
||||
--------
|
||||
|
||||
* Include version information in code in case package information lost.
|
||||
|
||||
Bug Fixes
|
||||
---------
|
||||
|
||||
* Fix WindowUtils exception on mouse over TrayIcon.
|
||||
* Fix bug toggling windows transparent/opaque (win32/OSX).
|
||||
* Avoid overwriting unchanged Pointer values in arrays (function calls with Pointer[] and Structure.read).
|
||||
* Ensure Structure fields marked `final` are never written.
|
||||
* Fix bug preventing proper population Structure.ByReference fields on Structure read.
|
||||
* Ensure double buffering is disabled in components added to a transparent window.
|
||||
* Fix UnsatisfiedLinkError attempting to load system libraries under Web Start.
|
||||
* Fix loading Web Start-provided libraries on OSX (libraries must have a .jnilib suffix under Web Start).
|
||||
* Properly include sources in Maven zip file (Issue 129).
|
||||
|
||||
Release 3.2.2
|
||||
=============
|
||||
|
||||
Features
|
||||
--------
|
||||
|
||||
* Provide length-specified Pointer.getStringArray()
|
||||
|
||||
Bug Fixes
|
||||
---------
|
||||
|
||||
* Fix crash with direct mapping if NULL struct* used (Issue 125).
|
||||
* Fix case where null-valued Structure fields would get non-null values on write.
|
||||
* Synch callback Structure/Structure[] arguments on callback return.
|
||||
* Fix NPE when mapping an interface to the current process.
|
||||
* Automatically load proper C library version from current process on Linux (avoids crashing bug on Ubuntu with libc-i686 packages active).
|
||||
* Avoid scanning structure contents in Structure.toString if contents aren't actually used.
|
||||
|
||||
Release 3.2.1
|
||||
==========
|
||||
|
||||
Features
|
||||
--------
|
||||
|
||||
* Add HRESULT, LONG mapping to W32API (marc strapetz).
|
||||
|
||||
|
||||
Bug Fixes
|
||||
---------
|
||||
|
||||
* Fix definition of HWND_BROADCAST in W32API.
|
||||
* Fix memory alignment checking (Issue 121).
|
||||
* Fix Structure equals/hashCode implementation, based on current Java fields rather than strictly native memory contents. Avoid using equals/hashCode when avoiding recursive reads/writes.
|
||||
|
||||
Release 3.2.0
|
||||
=============
|
||||
|
||||
Features
|
||||
--------
|
||||
|
||||
* Handle String, Structure, Callback, Buffer, and primitive arrays in direct mappings. Handle NativeMapped and TypeMapper, with optimized paths for IntegerType and PointerType.
|
||||
* Optionally throw errno/GetLastError as an exception. This is preferred to (and more efficient than) calling Native.getLastError().
|
||||
* Unload/delete native library unpacked from jna.jar if Native class is garbage collected. Only install shutdown hook if using the system class loader.
|
||||
* Auto-write contiguous Structure arrays when first element is written.
|
||||
* Support NativeMapped[] as function arguments for interface-mapped libraries (Issue 90).
|
||||
* Enable function lookup within current process on Windows.
|
||||
|
||||
Bug Fixes
|
||||
---------
|
||||
|
||||
* Restrict recursive structure reads/writes by thread instead of globally. This avoids potentially missed reads/writes with concurrent access (Issue 120).
|
||||
* Ensure Memory is not GC'd and freed if direct NIO buffers mapped to it are extant.
|
||||
* Allow types derived from java.nio.Buffer as Structure fields.
|
||||
|
||||
Release 3.1.0
|
||||
=============
|
||||
|
||||
Features
|
||||
--------
|
||||
|
||||
* Add raw JNI mapping of static Java methods. Performance is about 10X that of traditional JNA interface mapping, although with less type conversion functionality.
|
||||
* Add library option to allow passing/return of Java Objects.
|
||||
* Allow handling of uncaught callback exceptions (Issue 63).
|
||||
* Object oriented interface to X server (see contrib/x11)
|
||||
* Make Memory class more accessible.
|
||||
* Provide Structure ctor with Pointer argument (issue 102).
|
||||
* Allow implicit library access to current process on linux (issue 98).
|
||||
* Open all shared libraries with RTLD_GLOBAL, if applicable. This was the default behavior on OSX and changes the default behavior on linux.
|
||||
* Allow NIO Buffer as Structure field (with limitations) (Issue 57)
|
||||
* Add `size_t` size.
|
||||
|
||||
Bug Fixes
|
||||
---------
|
||||
|
||||
* Run tests with libjsig.so, if available, which fixes some crashes when running tests on 64-bit platforms.
|
||||
* Fix Issue 104.
|
||||
* Fix Issue 94 (Java 1.6 update 10 regression).
|
||||
* Fix Issue 51 (Java 1.6 update 10 regression).
|
||||
* Fix Issue 95.
|
||||
* Fix Issue 101.
|
||||
* Fix Issue 111, memory leak with String-returning Callback.
|
||||
* Fix missing storage of union type information (affects usage of struct/union by value as argument and return type).
|
||||
* Remove non-functional Structure ctors requiring explicit size.
|
||||
|
||||
Release 3.0.9
|
||||
=============
|
||||
|
||||
Bug Fixes
|
||||
---------
|
||||
|
||||
* Fix issue 93 by only manually searching jna.library.path, then falling back to passing the mapped library name to dlopen/LoadLibrary. This fixes an issue in JRUBY where the incorrect libc.so.6 was being loaded.
|
||||
|
||||
Release 3.0.8
|
||||
==========
|
||||
|
||||
Features
|
||||
--------
|
||||
|
||||
* Auto-map Pointer[]/String[]/WString[] return values.
|
||||
* Provide utility functions to convert String to primitive array.
|
||||
* Add jna.library.boot.path property to define the directory that the native stub library is loaded from
|
||||
|
||||
Release 3.0.7
|
||||
==========
|
||||
|
||||
Features
|
||||
--------
|
||||
|
||||
* Improve Win32 loading of libraries with dependencies.
|
||||
|
||||
Bug Fixes
|
||||
---------
|
||||
|
||||
* Fix bug reading structures with PointerType fields, introduced with Pointer field preservation fix.
|
||||
|
||||
Release 3.0.6
|
||||
=============
|
||||
|
||||
Features
|
||||
--------
|
||||
|
||||
* Allow arbitrary callback method names if only one method is defined in the class which implements Callback (colinwalters).
|
||||
* Allow specification of callback type mappers by using a TYPE_MAPPER field (colinwalters).
|
||||
* Allow uninitialized (null-valued) boxed primitives in Structures (colinwalters).
|
||||
* Add convenience methods to set active Union field and value simultaneously (xylo).
|
||||
* Augment Union read/writeField to set the active field.
|
||||
* Allow Structure auto-synch across native calls to be disabled.
|
||||
* Win64 support.
|
||||
|
||||
Bug Fixes
|
||||
---------
|
||||
|
||||
* Avoid overwriting unchanged Structure fields of type Pointer.
|
||||
* Avoid more content dragging on OSX or warn if it's too late.
|
||||
* Fix UnsatisfiedLinkError using transparent window on Win2K.
|
||||
* Fix memory leak with callbacks called from native threads with no Java context (johnwallace).
|
||||
* Defer structure size calculation if type mapper not yet set, allowing type mapper to be set in derived constructors (colinwalters).
|
||||
* Ensure structure memory is allocated in Structure.read/writeField.
|
||||
|
||||
Release 3.0.5
|
||||
=============
|
||||
|
||||
Features
|
||||
--------
|
||||
|
||||
* Allow explicit declaration of field order for VMs which have an unpredictable field order.
|
||||
* Check for w32 libraries with a "lib" prefix in addition to normal lookup.
|
||||
* Allow String[]/WString[] as callback argument/return value (assume NULL-terminated array).
|
||||
* Add Solaris8 compatibility to sunos-sparc build (Corey Puffalt).
|
||||
* Look up libraries using web start library path, if appropriate (Corey Puffalt).
|
||||
* Use constants to return integer boolean values.
|
||||
|
||||
Bug Fixes
|
||||
---------
|
||||
|
||||
* Properly track cursor on alpha-masked windows.
|
||||
* Avoid searching /lib or /usr/lib on 64-bit Linux.
|
||||
* Avoid using incorrect version of a library when both 32- and 64-bit versions are found.
|
||||
* Avoid transparent window events always dragging window bug on OSX.
|
||||
* Fix division by zero error calculating structure size on OSX/ppc.
|
||||
* Avoid overwriting initialized NativeMapped Structure fields when calculating structure size.
|
||||
* Fix NPE reading back into StringArray.
|
||||
|
||||
Release 3.0.4
|
||||
=============
|
||||
|
||||
Features
|
||||
--------
|
||||
|
||||
* Automatically write contents of Structure.ByReference fields on Structure.write().
|
||||
* Use the actual parameter type in Function invocations if no parameter type information is available (whether method is missing or untyped varargs).
|
||||
* Augmented X11 library mappings (xylo).
|
||||
* Support read/write of NativeMapped arrays within Structure (notably NativeLong).
|
||||
|
||||
Bug Fixes
|
||||
---------
|
||||
|
||||
* Fix library load error when /usr/lib32 and /usr/lib both exist (linux) (Marek Slama).
|
||||
* Avoid incorrect matches against libraries named with the same prefix (e.g. libc-client.so vs libc.so) (xylo).
|
||||
* Properly handle arrays of NativeMapped (e.g. NativeLong) as a Structure field (stefan endrullis).
|
||||
* Ensure structure size calculated prior to setting union active type.
|
||||
* XID is 64-bits on 64-bit X clients (xylo).
|
||||
* Ensure proper arch name is used on Debian (amd64 instead of x86_64).
|
||||
|
||||
Release 3.0.3
|
||||
=============
|
||||
|
||||
Features
|
||||
--------
|
||||
|
||||
* Enable build/run using IBM's J9 VM (leonardo).
|
||||
* Make StdCallFunctionMapper attempt a leading underscore if the simpler mapping doesn't work.
|
||||
* Allow Structure.read to overwrite final fields (may not work on some 1.4 VMs).
|
||||
|
||||
Bug Fixes
|
||||
---------
|
||||
|
||||
* Fix NPE when passing an array of Structure.ByReference.
|
||||
* Compare entire linux library version when finding a match.
|
||||
* Don't pass struct by value unless the method signature declares it.
|
||||
* Restrict custom first element structure alignment to OSX/ppc.
|
||||
* Improve performance and reduce memory footprint for window masks. Optimize polygon-based masks on w32. Use XFillRectangles on X11.
|
||||
* Fix linkage settings on sunos-amd64 to avoid relocation errors.
|
||||
* Fix callback allocation code on w32, solaris, freebsd, darwin (libffi was misconfigured).
|
||||
* Fix bug when NativeMapped fields are used in a Structure.ByValue instance.
|
||||
* Fix NPE calling Structure.read() before memory is initialized.
|
||||
* Fix NPE calling Structure.read/write with uninitialized NativeMapped fields.
|
||||
|
||||
Release 3.0.2
|
||||
=============
|
||||
|
||||
Features
|
||||
--------
|
||||
|
||||
* Attempt to force unload of jnidispatch library prior to deleting it (w32).
|
||||
* Added amd64 targets for OSX, FreeBSD, and Solaris.
|
||||
|
||||
Bug Fixes
|
||||
---------
|
||||
|
||||
* Reduce space allocated for invocation arguments.
|
||||
* Fix NPE when NativeMapped type is used in a Structure.
|
||||
* Fix some X11 type mappings for 64-bit.
|
||||
* Fix OSX Leopard/JRE1.5+ window transparency.
|
||||
* Fix window alpha compositing on X11.
|
||||
* Fix loading of libraries with unicode names on OSX.
|
||||
|
||||
Release 3.0.1
|
||||
=============
|
||||
|
||||
Features
|
||||
--------
|
||||
|
||||
* Improve transparent window drawing performance on w32
|
||||
* Use closure allocation from libffi
|
||||
|
||||
Bug Fixes
|
||||
---------
|
||||
|
||||
* Ensure nested structure arrays initialized with Structure.toArray use the appropriate native memory.
|
||||
* Ensure structure size is calculated prior to converting to array
|
||||
* Avoid creating new windows when setting a window mask
|
||||
* Fix bug in Pointer.setChar.
|
||||
|
||||
Release 3.0
|
||||
===========
|
||||
|
||||
Features
|
||||
--------
|
||||
|
||||
* More supported platforms, via GCC's libffi (wmeissner)
|
||||
* Support struct by value as parameter and return value (duncan)
|
||||
* Support struct by reference within structures
|
||||
* Provide access to native peer for java.awt.Component
|
||||
* Provide access to native peer on OS X.
|
||||
* Support MINGW32 builds (fullung)
|
||||
* Allow per-field Structure read/write by field name
|
||||
* Avoid writing Structure fields marked 'volatile'
|
||||
* Read and wrap function pointers in Structure fields when read with a Java proxy to allow easy Java-side invocation (Ken Larson)
|
||||
* Support array-backed Buffers as arguments (wmeissner)
|
||||
* Auto-conversion of custom types (wmeissner)
|
||||
* Allow pointer type-safety
|
||||
* Optional VM crash protection, via Native.setProtected(boolean)
|
||||
* Auto-convert WString[]
|
||||
* Provide library synchronization wrapper similar to Collections.synchronizedX
|
||||
* Support lookup of OSX framework libraries by name
|
||||
* Explicit access to shared library global data
|
||||
* Invocation interception to facilitate translation of C preprocessor macros and inline functions
|
||||
* Provide utility to determine Web Start native library cache location; auto-include this path if jnidispatch is included as a <nativelib> (robertengels)
|
||||
* Provide access to aligned memory
|
||||
* Versioning information embedded in jna.jar and native library
|
||||
|
||||
Bug Fixes
|
||||
---------
|
||||
|
||||
* Avoid attempts to free native library if it failed to load (wmeissner)
|
||||
* Explicitly check method signatures for varargs instead of heuristically guessing (wmeissner)
|
||||
* Disallow declaring Pointer-derived fields in Structures (Function, Memory)
|
||||
* Ensure Object.toString/hashCode/equals methods are intercepted on proxyied interfaces
|
||||
* Update X11 library for 64-bit use (wmeissner)
|
||||
* Properly map arrays of char*/wchar_t* under w32
|
||||
* Allow Pointer[] as a Structure field and Function argument
|
||||
* Fix some misleading Structure error messages
|
||||
* Properly preserve/return GetLastError/errno after native calls
|
||||
* Allocate executable memory on w32 to avoid errors with hardware-enforced data execution protection (DEP)
|
||||
* Fix VM crash on w32 stdcall callbacks
|
||||
* Use long offsets and sizes rather than ints (64-bit safe)
|
||||
* Properly clean up references and release closure memory on JNI_Unload
|
||||
* Use simpler AWT/JAWT library loading workaround
|
||||
* Avoid changing array references within a Structure on read
|
||||
|
||||
Release 2.5
|
||||
===========
|
||||
|
||||
Features
|
||||
--------
|
||||
|
||||
* Unions
|
||||
* Optimized shaped windows (chris deckers & olivier chafik); instantiation time improved by about 2-3 orders of magnitude for large, mostly contiguous shapes
|
||||
* Provide type mapping in callback arguments/results
|
||||
* Provide access to ByteBuffer direct address as a Pointer
|
||||
* Provide customization of native string encoding with jna.encoding system property
|
||||
|
||||
Bug Fixes
|
||||
---------
|
||||
|
||||
* Properly handle VMs with reversed Structure member storage
|
||||
* Avoid making window undecorated when clearing window mask on X11
|
||||
* Fix structure alignment bug on OSX/PPC when first element is > 4 bytes in size
|
||||
* Clearing OSX window mask by setting to MASK_NONE now works properly
|
||||
* Avoid index exceptions if native buffers are not NUL-terminated on string conversions
|
||||
* Write initialized Structure[] argument memory prior to function calls
|
||||
* Fix IllegalArgumentException reading WString into a Structure
|
||||
* Clear memory when allocating a structure block (fixes VM crash)
|
||||
* Remove versioned JAWT dependency on OSX, allowing use on 10.3/JRE1.4.
|
||||
|
||||
Release 2.4
|
||||
===========
|
||||
|
||||
Features
|
||||
--------
|
||||
|
||||
* Explicitly support unaligned structures
|
||||
* Auto-reallocate structure arrays
|
||||
* Automatic handling of w32 UNICODE/ASCII variants
|
||||
* Automatic mapping of decorated w32 stdcall function names
|
||||
* Customizable, automatic type conversion of arguments and results (wmeissner)
|
||||
* Support char*[] arguments as Java String[]
|
||||
* Structure supports Callback members (wmeissner)
|
||||
* getByteBuffer from Pointer/Memory (wmeissner)
|
||||
* Allow GC of native libraries
|
||||
* Facilitate use from non-Java contexts (JRuby et al.) (wmeissner)
|
||||
* Improve library path searching (wmeissner)
|
||||
* Handle Structure[] arguments
|
||||
* Handle native long arguments and return values
|
||||
* Handle direct and array-based ByteBuffer arguments (wmeissner)
|
||||
* Change default w32 build to use GCC (it's free, yo)
|
||||
|
||||
Bug Fixes
|
||||
---------
|
||||
|
||||
* Structure.toArray failed to initialize members
|
||||
* Disallow explicit free of Structure/Memory
|
||||
* Ensure native libraries are only loaded once until released
|
||||
* Properly handle NULL when the return value is a Structure
|
||||
* Proper conversion to wchar_t on linux
|
||||
* Copy full length of Java strings to C strings instead of stopping when a NUL character is encountered
|
||||
+112
@@ -0,0 +1,112 @@
|
||||

|
||||
|
||||
Java Native Access (JNA)
|
||||
========================
|
||||
|
||||
The definitive JNA reference (including an overview and usage details) is in the [JavaDoc](http://twall.github.com/jna/3.5.1/javadoc/). Please read the [overview](http://twall.github.com/jna/3.5.1/javadoc/overview-summary.html#overview_description).
|
||||
|
||||
JNA provides Java programs easy access to native shared libraries (DLLs on Windows) without writing anything but Java code—no JNI or native code is required. This functionality is comparable to Windows' Platform/Invoke and Python's ctypes. Access is dynamic at runtime without code generation.
|
||||
|
||||
JNA allows you to call directly into native functions using natural Java method invocation. The Java call looks just like it does in native code. Most calls require no special handling or configuration; no boilerplate or generated code is required.
|
||||
|
||||
The JNA library uses a small native library stub to dynamically invoke native code. The developer uses a Java interface to describe functions and structures in the target native library. This makes it quite easy to take advantage of native platform features without incurring the high overhead of configuring and building JNI code for multiple platforms.
|
||||
|
||||
While some attention is paid to performance, correctness and ease of use take priority.
|
||||
|
||||
JNA includes a platform library with many native functions already mapped as well as a set of utility interfaces that simplify native access.
|
||||
|
||||
Download
|
||||
========
|
||||
|
||||
Version 3.5.1
|
||||
|
||||
* [jna.jar](https://maven.java.net/content/repositories/releases/net/java/dev/jna/jna/3.5.1/jna-3.5.1.jar)
|
||||
* [platform.jar](https://maven.java.net/content/repositories/releases/net/java/dev/jna/platform/3.5.1/platform-3.5.1.jar)
|
||||
|
||||
Features
|
||||
========
|
||||
|
||||
* Automatic mapping from Java to native functions, with simple mappings for all primitive data types
|
||||
* Runs on most platforms which support Java
|
||||
* Automatic conversion between C and Java strings, with customizable encoding/decoding
|
||||
* Structure and Union arguments/return values, by reference and by value
|
||||
* Function Pointers, (callbacks from native code to Java) as arguments and/or members of a struct
|
||||
* Auto-generated Java proxies for native function pointers
|
||||
* By-reference (pointer-to-type) arguments
|
||||
* Java array and NIO Buffer arguments (primitive types and pointers) as pointer-to-buffer
|
||||
* Nested structures and arrays
|
||||
* Wide (wchar_t-based) strings
|
||||
* Native long support (32- or 64-bit as appropriate)
|
||||
* [Demo applications/examples](https://github.com/twall/jna/tree/master/contrib)
|
||||
* Supported on 1.4 or later JVMs, including JavaME (earlier VMs may work with stubbed NIO support)
|
||||
* Customizable marshalling/unmarshalling (argument and return value conversions)
|
||||
* Customizable mapping from Java method to native function name, and customizable invocation to simulate C preprocessor function macros
|
||||
* Support for automatic Windows ASCII/UNICODE function mappings
|
||||
* Varargs support
|
||||
* Type-safety for native pointers
|
||||
* VM crash protection (optional)
|
||||
* Optimized direct mapping for high-performance applications.
|
||||
|
||||
Community and Support
|
||||
=====================
|
||||
|
||||
All questions should be posted to the [jna-users Google group](http://groups.google.com/group/jna-users). Issues can be submitted [here on Github](https://github.com/twall/jna/issues).
|
||||
|
||||
When posting to the mailing list, please include the following:
|
||||
|
||||
* What OS/CPU/architecture you're using (e.g. Windows 7 64-bit)
|
||||
* Reference to your native interface definitions (i.e. C headers), if available
|
||||
* The JNA mapping you're trying to use
|
||||
* VM crash logs, if any
|
||||
* Example native usage, and your attempted Java usage
|
||||
|
||||
It's nearly impossible to indicate proper Java usage when there's no native
|
||||
reference to work from.
|
||||
|
||||
For commercial support, please contact twalljava [at] java [dot] net.
|
||||
|
||||
Using the Library
|
||||
=================
|
||||
|
||||
* [Getting Started](https://github.com/twall/jna/blob/master/www/GettingStarted.md)
|
||||
* [Mapping between Java and Native](https://github.com/twall/jna/blob/master/www/Mappings.md)
|
||||
* [Using Pointers and Arrays](https://github.com/twall/jna/blob/master/www/PointersAndArrays.md)
|
||||
* [Using Structures and Unions](https://github.com/twall/jna/blob/master/www/StructuresAndUnions.md)
|
||||
* [Using By-Reference Arguments](https://github.com/twall/jna/blob/master/www/ByRefArguments.md)
|
||||
* [Customization of Type Mapping](https://github.com/twall/jna/blob/master/www/CustomMappings.md)
|
||||
* [Callbacks/Function Pointers/Closures](https://github.com/twall/jna/blob/master/www/CallbacksAndClosures.md)
|
||||
* [Dynamically Typed Languages (JRuby/Jython)](https://github.com/twall/jna/blob/master/www/DynamicallyTypedLanguages.md)
|
||||
* [Platform Library](https://github.com/twall/jna/blob/master/www/PlatformLibrary.md)
|
||||
* [Direct Method Mapping](https://github.com/twall/jna/blob/master/www/DirectMapping.md) (Optimization)
|
||||
* [Frequently Asked Questions (FAQ)](https://github.com/twall/jna/blob/master/www/FrequentlyAskedQuestions.md)
|
||||
* [Avoiding Crashes](http://twall.github.com/jna/3.5.1/javadoc/overview-summary.html#crash-protection)
|
||||
|
||||
Primary Documentation (JavaDoc)
|
||||
===============================
|
||||
|
||||
The definitive JNA reference is in the [JavaDoc](http://twall.github.com/jna/3.5.1/javadoc/).
|
||||
|
||||
Developers
|
||||
==========
|
||||
|
||||
* [Contributing to JNA](https://github.com/twall/jna/blob/master/www/Contributing.md)
|
||||
* [Setting up a Windows Development Environment](https://github.com/twall/jna/blob/master/www/WindowsDevelopmentEnvironment.md)
|
||||
* [Setting up an Android Development Environment](https://github.com/twall/jna/blob/master/www/AndroidDevelopmentEnvironment.md)
|
||||
* [Releasing JNA](https://github.com/twall/jna/blob/master/www/ReleasingJNA.md)
|
||||
* [Publishing to Maven Central](https://github.com/twall/jna/blob/master/www/PublishingToMavenCentral.md)
|
||||
|
||||
Contributing
|
||||
============
|
||||
|
||||
You're encouraged to contribute to JNA. Fork the code from [https://github.com/twall/jna](https://github.com/twall/jna) and submit pull requests.
|
||||
|
||||
For more information on setting up a development environment see [Contributing to JNA](https://github.com/twall/jna/blob/master/www/Contributing.md).
|
||||
|
||||
If you are interested in paid support, feel free to say so on the [jna-users mailing list](http://groups.google.com/group/jna-users). Most simple questions will be answered on the list, but more complicated work, new features or target platforms can be negotiated with any of the JNA developers (this is how several of JNA's features came into being). You may even encounter other users with the same need and be able to cost share the new development.
|
||||
|
||||
License
|
||||
=======
|
||||
|
||||
This library is provided under the LGPL, version 2.1 or later. Alternative license arrangements are negotiable.
|
||||
|
||||
*NOTE: Oracle is not sponsoring this project, even though the package name (com.sun.jna) might imply otherwise.*
|
||||
+39
-36
@@ -18,43 +18,38 @@
|
||||
* get system process information, basic process control
|
||||
* additional file utilities (meta info, free space, etc)
|
||||
* enforce window minimum/maximum size (workaround java bug)
|
||||
* OSX ObjC access (see rococoa)
|
||||
|
||||
# TODO
|
||||
|
||||
* make direct calls call back *once* to Java where conversion is required,
|
||||
and process all arguments from there (instead of potentially swapping back
|
||||
and forth multipel times). This also makes it easer to perform conversions
|
||||
(no native changes required).
|
||||
|
||||
* direct/raw non-primitive array arguments (String[], Pointer[], NativeMapped[])
|
||||
|
||||
* ppc64 direct/raw failures (multiple)
|
||||
|
||||
* direct calls on ppc to varargs (callbacks) with FP args fail; avoid them for
|
||||
now
|
||||
|
||||
* combine direct and interface mapping calling code where possible
|
||||
* use consistent cpu references (x86->i386, x86_64->amd64)
|
||||
* osgi for osx
|
||||
|
||||
* make native dll extraction from jar public, to use with user dlls packaged
|
||||
in a jar
|
||||
|
||||
* Callback.PostCallWrite.write() cf PostCallRead; do Structure.write for any
|
||||
arguments as well
|
||||
* dispose memory/callbacks in Native finalizer to ensure they run first
|
||||
(use referencequeue to run them when they become unreachable)
|
||||
|
||||
* pointer.setValue(), to handle NativeMapped types and move read/writeValue
|
||||
methods out of Structure, to be used by Function w/NativeMapped[] parameter
|
||||
* make direct calls call back *once* to Java where conversion is required,
|
||||
and process all arguments from there (instead of potentially swapping back
|
||||
and forth multiple times). This also makes it easer to perform conversions
|
||||
(no native changes required).
|
||||
|
||||
* use libffi java raw?
|
||||
|
||||
* direct/raw non-primitive array arguments (String[], Pointer[], NativeMapped[])
|
||||
* ppc64 direct/raw failures (multiple)
|
||||
* direct calls on ppc to varargs (callbacks) with FP args fail; avoid them for
|
||||
now
|
||||
* combine direct and interface mapping calling code where possible
|
||||
* Callback.PostCallWrite.write() cf PostCallRead
|
||||
* GetPrimitiveArrayCritical: use this if flagged (by annotation? method name?)
|
||||
|
||||
* MethodArgument/ReturnMapper: per method mapping of arguments/return type.
|
||||
Can use annotations as shorthand to initialize a map, but basically set up a
|
||||
per-NativeLibrary (or per-Function?) map of methods to mappers.
|
||||
|
||||
Requires separate compilation of annotation handling.
|
||||
|
||||
* ditch type conversion context.
|
||||
|
||||
* ditch type conversion context (?)
|
||||
* packaging: 'types', 'convert/marshal' subpackages?
|
||||
note: marshal/unmarshal vs to/fromnative: to/fromnative is more
|
||||
explicit, since marshal/unmarshal doesn't indicate src/dst.
|
||||
@@ -93,6 +88,28 @@
|
||||
"pointer-requiring-free" (which is just Memory). For now, leave it up to
|
||||
the user to manage the pointer, since they have to define the free method
|
||||
anyway. use could always put a finalizer on a PointerType-derived type.
|
||||
* universal GCC build w/cross-compile (needs cross compilers...)
|
||||
* return Pointer.SIZE/LONG_SIZE/WCHAR_SIZE in bits (for consistency with 1.5)
|
||||
Long.SIZE, Integer.SIZE, et al.
|
||||
* interface "lvalue", which can provide a pointer to itself (reference() or
|
||||
addressOf())?
|
||||
* bitfields for structs (how?)
|
||||
|
||||
|
||||
# DONE
|
||||
* cache structure information per-class
|
||||
* fix setFieldOrder to *always* apply if used
|
||||
* Make a separate jar file for all OS-specific headers
|
||||
Maybe make interfaces per-header file (winbase, winnt, stdlib, etc),
|
||||
aggregated per-library (interface CLibrary extends stdlib, stdio, etc)
|
||||
(how useful would it really be, or is this just sorting legos?)
|
||||
o same for windowutils, fileutils, etc. (not useful)
|
||||
* check Structure "final" fields; should never write back to native memory
|
||||
* OSX ObjC access (see rococoa)
|
||||
* do Structure.write for any callback args
|
||||
* pointer.setValue(), to handle NativeMapped types and move read/writeValue
|
||||
methods out of Structure, to be used by Function w/NativeMapped[] parameter
|
||||
|
||||
* if method has "GetLastErrorException/ErrnoException" in its signature, use
|
||||
result codes + GetLastError/errno/errstr to auto-generate
|
||||
runtime exceptions? (cf P/Invoke; also useful for X11 return types)
|
||||
@@ -104,15 +121,6 @@
|
||||
if nonzero ?
|
||||
o otherwise, need an ExceptionOnZero, ExceptionOnNonZero runtime, from which
|
||||
derive GetLastError/ErrnoExceptionOnZero/NZ
|
||||
* universal GCC build w/cross-compile (needs cross compilers...)
|
||||
* return Pointer.SIZE/LONG_SIZE/WCHAR_SIZE in bits (for consistency with 1.5)
|
||||
Long.SIZE, Integer.SIZE, et al.
|
||||
* interface "lvalue", which can provide a pointer to itself (reference() or
|
||||
addressOf())?
|
||||
* bitfields for structs (how?)
|
||||
|
||||
|
||||
# DONE
|
||||
* verify get/set methods vs read/write for performance (Pointer)?
|
||||
(see RawTest for performance comparisons)
|
||||
* Allow Buffer in Structures (and callbacks) (auto-wrap in direct byte buffer)?
|
||||
@@ -255,11 +263,6 @@ int findNativeWindow(Window w);
|
||||
exception if the value is out of bounds).
|
||||
o when used as struct fields, could allow detection of field order by order
|
||||
of initialization (requires all-or-nothing usage, though)
|
||||
* Make a separate jar file for all OS-specific headers
|
||||
Maybe make interfaces per-header file (winbase, winnt, stdlib, etc),
|
||||
aggregated per-library (interface CLibrary extends stdlib, stdio, etc)
|
||||
(how useful would it really be, or is this just sorting legos?)
|
||||
o same for windowutils, fileutils, etc. (not useful)
|
||||
* StringBuffer/StringBuilder as mutable char*/wchar_t* argument
|
||||
NOTE: byte[]/char[] is probably better; it's trivial to convert to String
|
||||
and native code can't change the size anyway
|
||||
+1086
Diferenças do arquivo suprimidas por serem muito extensas
Carregar Diff
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<classpath>
|
||||
<classpathentry kind="src" path=""/>
|
||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
|
||||
<classpathentry kind="lib" path="/jnalib/dist/jna.jar"/>
|
||||
<classpathentry kind="src" path="/platform"/>
|
||||
<classpathentry kind="output" path="bin"/>
|
||||
</classpath>
|
||||
@@ -0,0 +1,17 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>alphamaskdemo</name>
|
||||
<comment></comment>
|
||||
<projects>
|
||||
</projects>
|
||||
<buildSpec>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.jdt.core.javabuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
</buildSpec>
|
||||
<natures>
|
||||
<nature>org.eclipse.jdt.core.javanature</nature>
|
||||
</natures>
|
||||
</projectDescription>
|
||||
@@ -0,0 +1,66 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project name="jnacontrib.alphamaskdemo" default="jar" basedir=".">
|
||||
<description>Builds, tests, and runs the project jnacontrib.alphamaskdemo.</description>
|
||||
<!-- Locations -->
|
||||
<property name="src" location="."/>
|
||||
<property name="build" location="build"/>
|
||||
<property name="jna-dist" location="../../dist"/>
|
||||
|
||||
<property name="classes" location="${build}/classes"/>
|
||||
<property name="jar" location="${build}/demo-alphamask.jar"/>
|
||||
<property name="file.reference.jna.jar" location="../../build/jna.jar"/>
|
||||
<property name="main-class" value="com.sun.jna.contrib.demo.AlphaMaskDemo" />
|
||||
|
||||
<path id="classpath">
|
||||
<fileset file="${file.reference.jna.jar}"/>
|
||||
<fileset dir="../platform/dist" includes="platform.jar"/>
|
||||
</path>
|
||||
|
||||
<!-- Run Demo. -->
|
||||
<target name="run" depends="compile">
|
||||
<java classname="${main-class}" fork="true">
|
||||
<classpath>
|
||||
<pathelement location="${classes}" />
|
||||
<path refid="classpath"/>
|
||||
</classpath>
|
||||
</java>
|
||||
</target>
|
||||
|
||||
<!-- Delete class and jar files. -->
|
||||
<target name="clean">
|
||||
<delete dir="${classes}"/>
|
||||
<delete file="${jar}"/>
|
||||
<delete dir="${build}"/>
|
||||
</target>
|
||||
|
||||
<!-- Compile all classes. -->
|
||||
<target name="compile">
|
||||
<mkdir dir="${classes}"/>
|
||||
<!-- Compile the project. -->
|
||||
<javac srcdir="${src}" destdir="${classes}" target="1.5" source="1.5"
|
||||
encoding="UTF-8" debug="on" includeantruntime="false">
|
||||
<classpath>
|
||||
<path refid="classpath"/>
|
||||
</classpath>
|
||||
</javac>
|
||||
</target>
|
||||
|
||||
<!-- Create jar-file. -->
|
||||
<target name="jar" depends="compile">
|
||||
<!-- Copy all non-java files to classes. -->
|
||||
<copy todir="${classes}/com">
|
||||
<fileset dir="${src}/com">
|
||||
<exclude name="**/*.java"/>
|
||||
</fileset>
|
||||
</copy>
|
||||
<jar jarfile="${jar}" basedir="${classes}">
|
||||
<manifest>
|
||||
<attribute name="Main-Class" value="${main-class}"/>
|
||||
</manifest>
|
||||
<!-- platform -->
|
||||
<fileset dir="../platform/build/classes/com"/>
|
||||
<!-- jna -->
|
||||
<zipfileset src="${file.reference.jna.jar}"/>
|
||||
</jar>
|
||||
</target>
|
||||
</project>
|
||||
+36
-30
@@ -10,9 +10,9 @@
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*/
|
||||
package com.sun.jna.examples;
|
||||
|
||||
import java.awt.event.*;
|
||||
package com.sun.jna.contrib.demo;
|
||||
|
||||
import java.awt.BorderLayout;
|
||||
import java.awt.Color;
|
||||
import java.awt.Graphics;
|
||||
@@ -26,6 +26,7 @@ import java.awt.Window;
|
||||
import java.awt.datatransfer.DataFlavor;
|
||||
import java.awt.datatransfer.Transferable;
|
||||
import java.awt.datatransfer.UnsupportedFlavorException;
|
||||
import java.awt.event.MouseAdapter;
|
||||
import java.awt.event.MouseEvent;
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.awt.image.ImageObserver;
|
||||
@@ -38,6 +39,7 @@ import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import javax.swing.ImageIcon;
|
||||
import javax.swing.JComponent;
|
||||
import javax.swing.JFrame;
|
||||
@@ -52,23 +54,26 @@ import javax.swing.border.EmptyBorder;
|
||||
import javax.swing.event.ChangeEvent;
|
||||
import javax.swing.event.ChangeListener;
|
||||
import javax.swing.event.MouseInputAdapter;
|
||||
|
||||
import com.sun.jna.Native;
|
||||
import com.sun.jna.NativeLong;
|
||||
import com.sun.jna.Pointer;
|
||||
import com.sun.jna.examples.unix.X11;
|
||||
import com.sun.jna.examples.unix.X11.Display;
|
||||
import com.sun.jna.examples.unix.X11.GC;
|
||||
import com.sun.jna.examples.unix.X11.XSetWindowAttributes;
|
||||
import com.sun.jna.examples.win32.GDI32;
|
||||
import com.sun.jna.examples.win32.User32;
|
||||
import com.sun.jna.examples.win32.GDI32.BITMAPINFO;
|
||||
import com.sun.jna.examples.win32.User32.BLENDFUNCTION;
|
||||
import com.sun.jna.examples.win32.User32.POINT;
|
||||
import com.sun.jna.examples.win32.User32.SIZE;
|
||||
import com.sun.jna.examples.win32.W32API.HANDLE;
|
||||
import com.sun.jna.examples.win32.W32API.HBITMAP;
|
||||
import com.sun.jna.examples.win32.W32API.HDC;
|
||||
import com.sun.jna.examples.win32.W32API.HWND;
|
||||
import com.sun.jna.platform.WindowUtils;
|
||||
import com.sun.jna.platform.unix.X11;
|
||||
import com.sun.jna.platform.unix.X11.Display;
|
||||
import com.sun.jna.platform.unix.X11.GC;
|
||||
import com.sun.jna.platform.win32.GDI32;
|
||||
import com.sun.jna.platform.win32.User32;
|
||||
import com.sun.jna.platform.win32.WinGDI;
|
||||
import com.sun.jna.platform.win32.WinUser;
|
||||
import com.sun.jna.platform.win32.WinDef.HBITMAP;
|
||||
import com.sun.jna.platform.win32.WinDef.HDC;
|
||||
import com.sun.jna.platform.win32.WinDef.HWND;
|
||||
import com.sun.jna.platform.win32.WinGDI.BITMAPINFO;
|
||||
import com.sun.jna.platform.win32.WinNT.HANDLE;
|
||||
import com.sun.jna.platform.win32.WinUser.BLENDFUNCTION;
|
||||
import com.sun.jna.platform.win32.WinUser.POINT;
|
||||
import com.sun.jna.platform.win32.WinUser.SIZE;
|
||||
import com.sun.jna.ptr.PointerByReference;
|
||||
|
||||
// TODO: put this into a reasonable API; right now this is pretty much
|
||||
@@ -124,7 +129,7 @@ public class AlphaMaskDemo implements Runnable {
|
||||
|
||||
private com.sun.jna.Memory buffer;
|
||||
private int[] pixels;
|
||||
private void updateX11(boolean a, boolean i) {
|
||||
private void updateX11(boolean a, boolean i) {
|
||||
X11 x11 = X11.INSTANCE;
|
||||
X11.Window win = X11.Window.None;
|
||||
Display dpy = x11.XOpenDisplay(null);
|
||||
@@ -149,7 +154,7 @@ public class AlphaMaskDemo implements Runnable {
|
||||
int w = image.getWidth(null);
|
||||
int h = image.getHeight(null);
|
||||
alphaWindow.setSize(w, h);
|
||||
if (buffer == null || buffer.getSize() != w*h*4) {
|
||||
if (buffer == null || buffer.size() != w*h*4) {
|
||||
buffer = new com.sun.jna.Memory(w*h*4);
|
||||
pixels = new int[w*h];
|
||||
}
|
||||
@@ -227,9 +232,9 @@ public class AlphaMaskDemo implements Runnable {
|
||||
if (!alphaWindow.isDisplayable()) {
|
||||
alphaWindow.pack();
|
||||
hWnd = getHwnd(alphaWindow);
|
||||
int flags = user.GetWindowLong(hWnd, User32.GWL_EXSTYLE);
|
||||
flags |= User32.WS_EX_LAYERED;
|
||||
user.SetWindowLong(hWnd, User32.GWL_EXSTYLE, flags);
|
||||
int flags = user.GetWindowLong(hWnd, WinUser.GWL_EXSTYLE);
|
||||
flags |= WinUser.WS_EX_LAYERED;
|
||||
user.SetWindowLong(hWnd, WinUser.GWL_EXSTYLE, flags);
|
||||
Window parent = alphaWindow.getOwner();
|
||||
Point where = parent.getLocationOnScreen();
|
||||
where.translate(parent.getWidth(), 0);
|
||||
@@ -257,11 +262,11 @@ public class AlphaMaskDemo implements Runnable {
|
||||
bmi.bmiHeader.biHeight = h;
|
||||
bmi.bmiHeader.biPlanes = 1;
|
||||
bmi.bmiHeader.biBitCount = 32;
|
||||
bmi.bmiHeader.biCompression = GDI32.BI_RGB;
|
||||
bmi.bmiHeader.biCompression = WinGDI.BI_RGB;
|
||||
bmi.bmiHeader.biSizeImage = w * h * 4;
|
||||
|
||||
PointerByReference ppbits = new PointerByReference();
|
||||
hBitmap = gdi.CreateDIBSection(memDC, bmi, GDI32.DIB_RGB_COLORS,
|
||||
hBitmap = gdi.CreateDIBSection(memDC, bmi, WinGDI.DIB_RGB_COLORS,
|
||||
ppbits, null, 0);
|
||||
oldBitmap = gdi.SelectObject(memDC, hBitmap);
|
||||
Pointer pbits = ppbits.getValue();
|
||||
@@ -290,9 +295,9 @@ public class AlphaMaskDemo implements Runnable {
|
||||
POINT srcLoc = new POINT();
|
||||
BLENDFUNCTION blend = new BLENDFUNCTION();
|
||||
blend.SourceConstantAlpha = (byte)(alpha * 255);
|
||||
blend.AlphaFormat = User32.AC_SRC_ALPHA;
|
||||
blend.AlphaFormat = WinUser.AC_SRC_ALPHA;
|
||||
user.UpdateLayeredWindow(hWnd, screenDC, loc, size, memDC, srcLoc,
|
||||
0, blend, User32.ULW_ALPHA);
|
||||
0, blend, WinUser.ULW_ALPHA);
|
||||
}
|
||||
finally {
|
||||
user.ReleaseDC(null, screenDC);
|
||||
@@ -306,9 +311,9 @@ public class AlphaMaskDemo implements Runnable {
|
||||
else if (a) {
|
||||
BLENDFUNCTION blend = new BLENDFUNCTION();
|
||||
blend.SourceConstantAlpha = (byte)(alpha * 255);
|
||||
blend.AlphaFormat = User32.AC_SRC_ALPHA;
|
||||
blend.AlphaFormat = WinUser.AC_SRC_ALPHA;
|
||||
user.UpdateLayeredWindow(hWnd, null, null, null, null, null,
|
||||
0, blend, User32.ULW_ALPHA);
|
||||
0, blend, WinUser.ULW_ALPHA);
|
||||
}
|
||||
|
||||
if (!alphaWindow.isVisible()) {
|
||||
@@ -383,8 +388,9 @@ public class AlphaMaskDemo implements Runnable {
|
||||
JPanel p = new JPanel(new BorderLayout(8, 8));
|
||||
p.setBorder(new EmptyBorder(8, 8, 8, 8));
|
||||
p.setTransferHandler(new TransferHandler() {
|
||||
private static final long serialVersionUID = 1L;
|
||||
public boolean canImport(JComponent comp, DataFlavor[] transferFlavors) {
|
||||
List list = Arrays.asList(transferFlavors);
|
||||
List<DataFlavor> list = Arrays.asList(transferFlavors);
|
||||
if (list.contains(URL_FLAVOR)
|
||||
|| list.contains(URI_LIST_FLAVOR)
|
||||
|| list.contains(DataFlavor.imageFlavor)
|
||||
@@ -421,8 +427,8 @@ public class AlphaMaskDemo implements Runnable {
|
||||
return true;
|
||||
}
|
||||
if (t.isDataFlavorSupported(DataFlavor.javaFileListFlavor)){
|
||||
List files = (List)t.getTransferData(DataFlavor.javaFileListFlavor);
|
||||
File f = (File)files.get(0);
|
||||
List<File> files = (List<File>) t.getTransferData(DataFlavor.javaFileListFlavor);
|
||||
File f = files.get(0);
|
||||
URL url = new URL("file://" + f.toURI().toURL().getPath());
|
||||
Image image = Toolkit.getDefaultToolkit().getImage(url);
|
||||
setImage(image);
|
||||
+9
-7
@@ -8,10 +8,10 @@
|
||||
* the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
||||
* PURPOSE. See the GNU Lesser General Public License for more details.
|
||||
*/
|
||||
package com.sun.jna.examples;
|
||||
package com.sun.jna.contrib.demo;
|
||||
|
||||
import java.awt.Cursor;
|
||||
import java.awt.BorderLayout;
|
||||
import java.awt.Cursor;
|
||||
import java.awt.GraphicsConfiguration;
|
||||
import java.awt.GraphicsEnvironment;
|
||||
import java.awt.Image;
|
||||
@@ -52,6 +52,8 @@ import javax.swing.event.ChangeEvent;
|
||||
import javax.swing.event.ChangeListener;
|
||||
import javax.swing.event.MouseInputAdapter;
|
||||
|
||||
import com.sun.jna.platform.WindowUtils;
|
||||
|
||||
public class AlphaMaskDemo2 implements Runnable {
|
||||
private static final DataFlavor URL_FLAVOR =
|
||||
new DataFlavor("application/x-java-url; class=java.net.URL", "URL");
|
||||
@@ -143,9 +145,10 @@ public class AlphaMaskDemo2 implements Runnable {
|
||||
JPanel p = new JPanel(new BorderLayout(8, 8));
|
||||
p.setBorder(new EmptyBorder(8, 8, 8, 8));
|
||||
p.setTransferHandler(new TransferHandler() {
|
||||
public boolean canImport(JComponent comp,
|
||||
private static final long serialVersionUID = 1L;
|
||||
public boolean canImport(JComponent comp,
|
||||
DataFlavor[] transferFlavors) {
|
||||
List list = Arrays.asList(transferFlavors);
|
||||
List<DataFlavor> list = Arrays.asList(transferFlavors);
|
||||
if (list.contains(URL_FLAVOR) || list.contains(URI_LIST_FLAVOR)
|
||||
|| list.contains(DataFlavor.imageFlavor)
|
||||
|| list.contains(DataFlavor.javaFileListFlavor)) {
|
||||
@@ -183,9 +186,8 @@ public class AlphaMaskDemo2 implements Runnable {
|
||||
return true;
|
||||
}
|
||||
if (t.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {
|
||||
List files = (List)t
|
||||
.getTransferData(DataFlavor.javaFileListFlavor);
|
||||
File f = (File)files.get(0);
|
||||
List<File> files = (List<File>) t.getTransferData(DataFlavor.javaFileListFlavor);
|
||||
File f = files.get(0);
|
||||
URL url = new URL("file://"
|
||||
+ f.toURI().toURL().getPath());
|
||||
Image image = Toolkit.getDefaultToolkit().getImage(url);
|
||||
|
Antes Largura: | Altura: | Tamanho: 18 KiB Depois Largura: | Altura: | Tamanho: 18 KiB |
@@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<classpath>
|
||||
<classpathentry kind="src" path=""/>
|
||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
|
||||
<classpathentry kind="src" path="/platform"/>
|
||||
<classpathentry kind="output" path="bin"/>
|
||||
</classpath>
|
||||
@@ -0,0 +1,17 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>balloonmanagerdemo</name>
|
||||
<comment></comment>
|
||||
<projects>
|
||||
</projects>
|
||||
<buildSpec>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.jdt.core.javabuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
</buildSpec>
|
||||
<natures>
|
||||
<nature>org.eclipse.jdt.core.javanature</nature>
|
||||
</natures>
|
||||
</projectDescription>
|
||||
@@ -0,0 +1,68 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project name="jnacontrib.balloonmanagerdemo" default="jar" basedir=".">
|
||||
<description>Builds, tests, and runs the project jnacontrib.balloonmanagerdemo.</description>
|
||||
<!-- Locations -->
|
||||
<property name="src" location="."/>
|
||||
<property name="build" location="build"/>
|
||||
<property name="jna-dist" location="../../dist"/>
|
||||
|
||||
<property name="classes" location="${build}/classes"/>
|
||||
<property name="jar" location="${build}/demo-balloonmanager.jar"/>
|
||||
<property name="file.reference.jna.jar" location="../../build/jna.jar"/>
|
||||
<property name="main-class" value="com.sun.jna.contrib.demo.BalloonManagerDemo" />
|
||||
|
||||
<path id="classpath">
|
||||
<fileset file="${file.reference.jna.jar}"/>
|
||||
<fileset dir="../platform/dist" includes="platform.jar"/>
|
||||
</path>
|
||||
|
||||
<!-- Run Demo. -->
|
||||
<target name="run" depends="compile">
|
||||
<java classname="${main-class}" fork="true">
|
||||
<classpath>
|
||||
<pathelement location="${classes}" />
|
||||
<path refid="classpath"/>
|
||||
</classpath>
|
||||
</java>
|
||||
</target>
|
||||
|
||||
<!-- Delete class and jar files. -->
|
||||
<target name="clean">
|
||||
<delete dir="${classes}"/>
|
||||
<delete file="${jar}"/>
|
||||
<delete dir="${build}"/>
|
||||
</target>
|
||||
|
||||
<!-- Compile all classes. -->
|
||||
<target name="compile">
|
||||
<mkdir dir="${classes}"/>
|
||||
<!-- Compile the project. -->
|
||||
<javac srcdir="${src}" destdir="${classes}" target="1.5" source="1.5"
|
||||
encoding="UTF-8" debug="on" includeantruntime="false">
|
||||
<classpath>
|
||||
<path refid="classpath"/>
|
||||
</classpath>
|
||||
</javac>
|
||||
</target>
|
||||
|
||||
<!-- Create jar-file. -->
|
||||
<target name="jar" depends="compile">
|
||||
|
||||
<!-- Copy all non-java files to classes. -->
|
||||
<copy todir="${classes}/com">
|
||||
<fileset dir="${src}/com">
|
||||
<exclude name="**/*.java"/>
|
||||
</fileset>
|
||||
</copy>
|
||||
|
||||
<jar jarfile="${jar}" basedir="${classes}">
|
||||
<manifest>
|
||||
<attribute name="Main-Class" value="${main-class}"/>
|
||||
</manifest>
|
||||
<!-- platform -->
|
||||
<fileset dir="../platform/build/classes/com"/>
|
||||
<!-- jna -->
|
||||
<zipfileset src="${file.reference.jna.jar}"/>
|
||||
</jar>
|
||||
</target>
|
||||
</project>
|
||||
+6
-1
@@ -10,7 +10,7 @@
|
||||
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for
|
||||
* more details.
|
||||
*/
|
||||
package com.sun.jna.examples;
|
||||
package com.sun.jna.contrib.demo;
|
||||
|
||||
import java.awt.BorderLayout;
|
||||
import java.awt.Color;
|
||||
@@ -31,11 +31,14 @@ import java.awt.geom.AffineTransform;
|
||||
import java.awt.geom.Area;
|
||||
import java.awt.geom.GeneralPath;
|
||||
import java.awt.geom.RoundRectangle2D;
|
||||
|
||||
import javax.swing.Box;
|
||||
import javax.swing.JWindow;
|
||||
import javax.swing.Popup;
|
||||
import javax.swing.SwingUtilities;
|
||||
|
||||
import com.sun.jna.platform.WindowUtils;
|
||||
|
||||
/**
|
||||
* Provides a popup balloon containing an arbitrary component. This provides
|
||||
* a form of content-specific decoration less transient than a tooltip, and less
|
||||
@@ -54,6 +57,7 @@ public class BalloonManager {
|
||||
}
|
||||
|
||||
private static class DropShadow extends JWindow {
|
||||
private static final long serialVersionUID = 1L;
|
||||
private static final float SHADOW_ALPHA = .25f;
|
||||
private static final float YSCALE = .80f;
|
||||
private static final double ANGLE = 2*Math.PI/24;
|
||||
@@ -146,6 +150,7 @@ public class BalloonManager {
|
||||
}
|
||||
|
||||
private static final class BubbleWindow extends JWindow {
|
||||
private static final long serialVersionUID = 1L;
|
||||
private static final int Y_OFFSET = 50;
|
||||
private static final int ARC = 25;
|
||||
|
||||
+4
-1
@@ -10,7 +10,7 @@
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*/
|
||||
package com.sun.jna.examples;
|
||||
package com.sun.jna.contrib.demo;
|
||||
|
||||
import java.awt.BasicStroke;
|
||||
import java.awt.Color;
|
||||
@@ -24,6 +24,7 @@ import java.awt.event.MouseAdapter;
|
||||
import java.awt.event.MouseEvent;
|
||||
import java.awt.event.MouseListener;
|
||||
import java.awt.geom.Rectangle2D;
|
||||
|
||||
import javax.swing.Icon;
|
||||
import javax.swing.JFrame;
|
||||
import javax.swing.JLabel;
|
||||
@@ -35,6 +36,8 @@ import javax.swing.SwingConstants;
|
||||
import javax.swing.UIManager;
|
||||
import javax.swing.border.EmptyBorder;
|
||||
|
||||
import com.sun.jna.platform.WindowUtils;
|
||||
|
||||
/** Demonstration of BalloonManager. */
|
||||
public class BalloonManagerDemo {
|
||||
private static final int ICON_SIZE = 48;
|
||||
@@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<classpath>
|
||||
<classpathentry kind="src" path=""/>
|
||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
|
||||
<classpathentry kind="src" path="/platform"/>
|
||||
<classpathentry kind="output" path="bin"/>
|
||||
</classpath>
|
||||
@@ -0,0 +1,17 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>balloontips</name>
|
||||
<comment></comment>
|
||||
<projects>
|
||||
</projects>
|
||||
<buildSpec>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.jdt.core.javabuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
</buildSpec>
|
||||
<natures>
|
||||
<nature>org.eclipse.jdt.core.javanature</nature>
|
||||
</natures>
|
||||
</projectDescription>
|
||||
@@ -1,3 +1,5 @@
|
||||
An implementation of balloon tips.
|
||||
|
||||
Compile the two classes in this directory. Requires Java 1.5+.
|
||||
|
||||
javac -cp examples.jar *.java
|
||||
@@ -0,0 +1,68 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project name="jnacontrib.balloontipsdemo" default="jar" basedir=".">
|
||||
<description>Builds, tests, and runs the project jnacontrib.balloontipsdemo.</description>
|
||||
<!-- Locations -->
|
||||
<property name="src" location="."/>
|
||||
<property name="build" location="build"/>
|
||||
<property name="jna-dist" location="../../dist"/>
|
||||
|
||||
<property name="classes" location="${build}/classes"/>
|
||||
<property name="jar" location="${build}/demo-balloontips.jar"/>
|
||||
<property name="file.reference.jna.jar" location="../../build/jna.jar"/>
|
||||
<property name="main-class" value="com.sun.jna.contrib.demo.FilteredTextField" />
|
||||
|
||||
<path id="classpath">
|
||||
<fileset file="${file.reference.jna.jar}"/>
|
||||
<fileset dir="../platform/dist" includes="platform.jar"/>
|
||||
</path>
|
||||
|
||||
<!-- Run Demo. -->
|
||||
<target name="run" depends="compile">
|
||||
<java classname="${main-class}" fork="true">
|
||||
<classpath>
|
||||
<pathelement location="${classes}" />
|
||||
<path refid="classpath"/>
|
||||
</classpath>
|
||||
</java>
|
||||
</target>
|
||||
|
||||
<!-- Delete class and jar files. -->
|
||||
<target name="clean">
|
||||
<delete dir="${classes}"/>
|
||||
<delete file="${jar}"/>
|
||||
<delete dir="${build}"/>
|
||||
</target>
|
||||
|
||||
<!-- Compile all classes. -->
|
||||
<target name="compile">
|
||||
<mkdir dir="${classes}"/>
|
||||
<!-- Compile the project. -->
|
||||
<javac srcdir="${src}" destdir="${classes}" target="1.5" source="1.5"
|
||||
encoding="UTF-8" debug="on" includeantruntime="false">
|
||||
<classpath>
|
||||
<path refid="classpath"/>
|
||||
</classpath>
|
||||
</javac>
|
||||
</target>
|
||||
|
||||
<!-- Create jar-file. -->
|
||||
<target name="jar" depends="compile">
|
||||
|
||||
<!-- Copy all non-java files to classes. -->
|
||||
<copy todir="${classes}/com">
|
||||
<fileset dir="${src}/com">
|
||||
<exclude name="**/*.java"/>
|
||||
</fileset>
|
||||
</copy>
|
||||
|
||||
<jar jarfile="${jar}" basedir="${classes}">
|
||||
<manifest>
|
||||
<attribute name="Main-Class" value="${main-class}"/>
|
||||
</manifest>
|
||||
<!-- platform -->
|
||||
<fileset dir="../platform/build/classes/com"/>
|
||||
<!-- jna -->
|
||||
<zipfileset src="${file.reference.jna.jar}"/>
|
||||
</jar>
|
||||
</target>
|
||||
</project>
|
||||
+3
-6
@@ -1,4 +1,4 @@
|
||||
//package bms.ui.widgets;
|
||||
package com.sun.jna.contrib.demo;
|
||||
|
||||
import java.awt.Color;
|
||||
import java.awt.Component;
|
||||
@@ -30,7 +30,7 @@ import javax.swing.Popup;
|
||||
import javax.swing.SwingUtilities;
|
||||
import javax.swing.Timer;
|
||||
|
||||
import com.sun.jna.examples.WindowUtils;
|
||||
import com.sun.jna.platform.WindowUtils;
|
||||
|
||||
/**
|
||||
* The BalloonTipManager class handles creation and disposal of balloon style
|
||||
@@ -61,8 +61,8 @@ public class BalloonTipManager {
|
||||
/*
|
||||
* The BalloonTip class defines the look of the BalloonTip object.
|
||||
*/
|
||||
@SuppressWarnings("serial")
|
||||
private static final class BalloonTip extends JWindow {
|
||||
private static final long serialVersionUID = 1L;
|
||||
private static final Integer HMARGIN = 10;
|
||||
private static final Integer VMARGIN = 6;
|
||||
private static final Integer VSPACER = 4;
|
||||
@@ -476,7 +476,6 @@ public class BalloonTipManager {
|
||||
/*
|
||||
* This class handles events spawned from moving the component.
|
||||
*/
|
||||
@SuppressWarnings("serial")
|
||||
final class ComponentEar extends ComponentAdapter {
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
@@ -491,7 +490,6 @@ public class BalloonTipManager {
|
||||
/*
|
||||
* This class handles events spawned when a mouse button is pressed.
|
||||
*/
|
||||
@SuppressWarnings("serial")
|
||||
final class MouseEar extends MouseAdapter {
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
@@ -506,7 +504,6 @@ public class BalloonTipManager {
|
||||
/*
|
||||
* This class handles events spawned when the component loses focus.
|
||||
*/
|
||||
@SuppressWarnings("serial")
|
||||
final class FocusEar extends FocusAdapter {
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
+4
-2
@@ -1,4 +1,4 @@
|
||||
//package bms.ui.widgets;
|
||||
package com.sun.jna.contrib.demo;
|
||||
|
||||
import java.awt.BorderLayout;
|
||||
import java.awt.Color;
|
||||
@@ -8,6 +8,7 @@ import java.util.ArrayList;
|
||||
|
||||
import javax.swing.BorderFactory;
|
||||
import javax.swing.JFrame;
|
||||
import javax.swing.JLabel;
|
||||
import javax.swing.JPanel;
|
||||
import javax.swing.JTextField;
|
||||
import javax.swing.Popup;
|
||||
@@ -398,7 +399,7 @@ public class FilteredTextField extends JTextField {
|
||||
catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
JFrame jframe = new JFrame("FilteredTextField Test");
|
||||
JFrame jframe = new JFrame("Balloon Tips on FilteredTextField");
|
||||
jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
||||
jframe.setSize(400, 75);
|
||||
jframe.setLocation(400, 400);
|
||||
@@ -414,6 +415,7 @@ public class FilteredTextField extends JTextField {
|
||||
"Only lower case letters, hyphens, underscores, and spaces allowed.");
|
||||
ftfield.setValidRegex("^a+[a-z-_ ]*");
|
||||
ftfield.setValidError("The string must begin with the letter 'a'.");
|
||||
jpanel.add(new JLabel("Type some text into either field"), BorderLayout.NORTH);
|
||||
jpanel.add(ftfield, BorderLayout.CENTER);
|
||||
jpanel.add(new FilteredTextField(10), BorderLayout.SOUTH);
|
||||
jframe.getContentPane().add(jpanel);
|
||||
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<classpath>
|
||||
<classpathentry kind="src" path=""/>
|
||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
|
||||
<classpathentry kind="lib" path="/jnalib/dist/jna.jar"/>
|
||||
<classpathentry kind="src" path="/platform"/>
|
||||
<classpathentry kind="output" path="bin"/>
|
||||
</classpath>
|
||||
@@ -0,0 +1,17 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>dnddemo</name>
|
||||
<comment></comment>
|
||||
<projects>
|
||||
</projects>
|
||||
<buildSpec>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.jdt.core.javabuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
</buildSpec>
|
||||
<natures>
|
||||
<nature>org.eclipse.jdt.core.javanature</nature>
|
||||
</natures>
|
||||
</projectDescription>
|
||||
@@ -0,0 +1,68 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project name="jnacontrib.dnddemo" default="jar" basedir=".">
|
||||
<description>Builds, tests, and runs the project jnacontrib.dnddemo.</description>
|
||||
<!-- Locations -->
|
||||
<property name="src" location="."/>
|
||||
<property name="build" location="build"/>
|
||||
<property name="jna-dist" location="../../dist"/>
|
||||
|
||||
<property name="classes" location="${build}/classes"/>
|
||||
<property name="jar" location="${build}/demo-dnd.jar"/>
|
||||
<property name="file.reference.jna.jar" location="../../build/jna.jar"/>
|
||||
<property name="main-class" value="com.sun.jna.contrib.demo.GhostedDragImageDemo" />
|
||||
|
||||
<path id="classpath">
|
||||
<fileset file="${file.reference.jna.jar}"/>
|
||||
<fileset dir="../platform/dist" includes="platform.jar"/>
|
||||
</path>
|
||||
|
||||
<!-- Run Demo. -->
|
||||
<target name="run" depends="compile">
|
||||
<java classname="${main-class}" fork="true">
|
||||
<classpath>
|
||||
<pathelement location="${classes}" />
|
||||
<path refid="classpath"/>
|
||||
</classpath>
|
||||
</java>
|
||||
</target>
|
||||
|
||||
<!-- Delete class and jar files. -->
|
||||
<target name="clean">
|
||||
<delete dir="${classes}"/>
|
||||
<delete file="${jar}"/>
|
||||
<delete dir="${build}"/>
|
||||
</target>
|
||||
|
||||
<!-- Compile all classes. -->
|
||||
<target name="compile">
|
||||
<mkdir dir="${classes}"/>
|
||||
<!-- Compile the project. -->
|
||||
<javac srcdir="${src}" destdir="${classes}" target="1.5" source="1.5"
|
||||
encoding="UTF-8" debug="on" includeantruntime="false">
|
||||
<classpath>
|
||||
<path refid="classpath"/>
|
||||
</classpath>
|
||||
</javac>
|
||||
</target>
|
||||
|
||||
<!-- Create jar-file. -->
|
||||
<target name="jar" depends="compile">
|
||||
|
||||
<!-- Copy all non-java files to classes. -->
|
||||
<copy todir="${classes}/com">
|
||||
<fileset dir="${src}/com">
|
||||
<exclude name="**/*.java"/>
|
||||
</fileset>
|
||||
</copy>
|
||||
|
||||
<jar jarfile="${jar}" basedir="${classes}">
|
||||
<manifest>
|
||||
<attribute name="Main-Class" value="${main-class}"/>
|
||||
</manifest>
|
||||
<!-- platform -->
|
||||
<fileset dir="../platform/build/classes/com"/>
|
||||
<!-- jna -->
|
||||
<zipfileset src="${file.reference.jna.jar}"/>
|
||||
</jar>
|
||||
</target>
|
||||
</project>
|
||||
+7
-2
@@ -10,7 +10,7 @@
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*/
|
||||
package com.sun.jna.examples.dnd;
|
||||
package com.sun.jna.contrib.demo;
|
||||
|
||||
import java.awt.Image;
|
||||
import java.awt.Point;
|
||||
@@ -32,6 +32,10 @@ import javax.swing.JFrame;
|
||||
import javax.swing.JLabel;
|
||||
import javax.swing.UIManager;
|
||||
|
||||
import com.sun.jna.platform.dnd.DragHandler;
|
||||
import com.sun.jna.platform.dnd.DropHandler;
|
||||
|
||||
|
||||
/** Demonstrate ghosted drag images. Unfortunately, Swing drag support hides
|
||||
* the hooks we need to move the drag image around, so we don't use it and
|
||||
* roll our own.
|
||||
@@ -59,7 +63,8 @@ public class GhostedDragImageDemo {
|
||||
}
|
||||
|
||||
public static class DragLabel extends JLabel {
|
||||
private boolean dragging;
|
||||
private static final long serialVersionUID = 1L;
|
||||
private boolean dragging;
|
||||
public DragLabel(Icon icon) {
|
||||
super(icon);
|
||||
new DragHandler(this, DnDConstants.ACTION_COPY_OR_MOVE) {
|
||||
jnalib/src/com/sun/jna/examples/dnd/toucan.png → contrib/dnddemo/com/sun/jna/contrib/demo/toucan.png
Arquivo executável → Arquivo normal
|
Antes Largura: | Altura: | Tamanho: 28 KiB Depois Largura: | Altura: | Tamanho: 28 KiB |
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<classpath>
|
||||
<classpathentry kind="src" path="src"/>
|
||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
|
||||
<classpathentry combineaccessrules="false" kind="src" path="/jnalib"/>
|
||||
<classpathentry kind="lib" path="C:/GitHub/jna-3.5.1.jar"/>
|
||||
<classpathentry kind="output" path="bin"/>
|
||||
</classpath>
|
||||
@@ -0,0 +1,17 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>msoffice</name>
|
||||
<comment></comment>
|
||||
<projects>
|
||||
</projects>
|
||||
<buildSpec>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.jdt.core.javabuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
</buildSpec>
|
||||
<natures>
|
||||
<nature>org.eclipse.jdt.core.javanature</nature>
|
||||
</natures>
|
||||
</projectDescription>
|
||||
@@ -0,0 +1,2 @@
|
||||
eclipse.preferences.version=1
|
||||
encoding//src/com/sun/jna/platform/win32/office/MSWord.java=UTF-8
|
||||
Arquivo binário não exibido.
Arquivo binário não exibido.
@@ -0,0 +1,36 @@
|
||||
package com.sun.jna.platform.win32.office;
|
||||
|
||||
import java.io.FileWriter;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
|
||||
import com.sun.jna.platform.win32.COM.COMUtils;
|
||||
import com.sun.jna.platform.win32.COM.COMUtils.COMInfo;
|
||||
|
||||
public class COMInfoUtil {
|
||||
|
||||
public static void main(String[] args) {
|
||||
try {
|
||||
String filename = "C:\\TEMP\\CLSIDs.txt";
|
||||
ArrayList<COMInfo> comInfos = COMUtils.getAllCOMInfoOnSystem();
|
||||
FileWriter writer = new FileWriter(filename);
|
||||
|
||||
for (COMInfo comInfo : comInfos) {
|
||||
String result = "CLSID: " + comInfo.clsid + "\n";
|
||||
result += "InprocHandler32: " + comInfo.inprocHandler32 + "\n";
|
||||
result += "InprocServer32: " + comInfo.inprocServer32 + "\n";
|
||||
result += "LocalServer32: " + comInfo.localServer32 + "\n";
|
||||
result += "ProgID: " + comInfo.progID + "\n";
|
||||
result += "ProgTypeLibID: " + comInfo.typeLib + "\n";
|
||||
|
||||
writer.write(result + "\n");
|
||||
}
|
||||
|
||||
System.out.println("file written to: " + filename);
|
||||
System.out.println("Found CLSID`s on the system: "
|
||||
+ comInfos.size());
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,162 @@
|
||||
package com.sun.jna.platform.win32.office;
|
||||
|
||||
import com.sun.jna.platform.win32.OaIdl.VARIANT_BOOL;
|
||||
import com.sun.jna.platform.win32.OleAuto;
|
||||
import com.sun.jna.platform.win32.Variant;
|
||||
import com.sun.jna.platform.win32.Variant.VARIANT;
|
||||
import com.sun.jna.platform.win32.WTypes.BSTR;
|
||||
import com.sun.jna.platform.win32.WinNT.HRESULT;
|
||||
import com.sun.jna.platform.win32.COM.COMException;
|
||||
import com.sun.jna.platform.win32.COM.COMObject;
|
||||
import com.sun.jna.platform.win32.COM.COMUtils;
|
||||
import com.sun.jna.platform.win32.COM.IDispatch;
|
||||
|
||||
public class MSExcel extends COMObject {
|
||||
|
||||
public MSExcel() throws COMException {
|
||||
super("Excel.Application", false);
|
||||
}
|
||||
|
||||
public MSExcel(boolean visible) throws COMException {
|
||||
this();
|
||||
this.setVisible(Variant.VARIANT_TRUE);
|
||||
}
|
||||
|
||||
public void setVisible(VARIANT_BOOL bVisible) throws COMException {
|
||||
VARIANT.ByReference result = new VARIANT.ByReference();
|
||||
this.oleMethod(OleAuto.DISPATCH_PROPERTYPUT, result, this.iDispatch,
|
||||
"Visible", new VARIANT(bVisible));
|
||||
}
|
||||
|
||||
public String getVersion() throws COMException {
|
||||
VARIANT.ByReference result = new VARIANT.ByReference();
|
||||
this.oleMethod(OleAuto.DISPATCH_PROPERTYGET, result, this.iDispatch,
|
||||
"Version");
|
||||
|
||||
return result.getValue().toString();
|
||||
}
|
||||
|
||||
public HRESULT newExcelBook() throws COMException {
|
||||
HRESULT hr = oleMethod(OleAuto.DISPATCH_METHOD, null, getWorkbooks()
|
||||
.getIDispatch(), "Add");
|
||||
|
||||
return hr;
|
||||
}
|
||||
|
||||
public HRESULT openExcelBook(String filename, boolean bVisible)
|
||||
throws COMException {
|
||||
// OpenDocument
|
||||
BSTR bstrFilename = OleAuto.INSTANCE.SysAllocString(filename);
|
||||
VARIANT varFilename = new VARIANT(bstrFilename);
|
||||
HRESULT hr = oleMethod(OleAuto.DISPATCH_METHOD, null, getWorkbooks()
|
||||
.getIDispatch(), "Open", varFilename);
|
||||
|
||||
return hr;
|
||||
}
|
||||
|
||||
public HRESULT closeActiveWorkbook(VARIANT_BOOL bSave) throws COMException {
|
||||
|
||||
HRESULT hr = oleMethod(OleAuto.DISPATCH_METHOD, null,
|
||||
getActiveWorkbook().getIDispatch(), "Close", new VARIANT(bSave));
|
||||
|
||||
return hr;
|
||||
}
|
||||
|
||||
public HRESULT quit() throws COMException {
|
||||
HRESULT hr = this.oleMethod(OleAuto.DISPATCH_METHOD, null,
|
||||
this.iDispatch, "Quit");
|
||||
|
||||
COMUtils.SUCCEEDED(hr);
|
||||
return hr;
|
||||
}
|
||||
|
||||
public HRESULT insertValue(String range, String value) throws COMException {
|
||||
HRESULT hr;
|
||||
|
||||
BSTR bstrRange = OleAuto.INSTANCE.SysAllocString(range);
|
||||
VARIANT varRange = new VARIANT(bstrRange);
|
||||
VARIANT.ByReference result = new VARIANT.ByReference();
|
||||
hr = oleMethod(OleAuto.DISPATCH_PROPERTYGET, result, this
|
||||
.getActiveSheet().getIDispatch(), "Range", varRange);
|
||||
Range pRange = new Range((IDispatch) result.getValue());
|
||||
|
||||
BSTR bstrValue = OleAuto.INSTANCE.SysAllocString(value);
|
||||
VARIANT varText = new VARIANT(bstrValue);
|
||||
hr = oleMethod(OleAuto.DISPATCH_PROPERTYPUT, null,
|
||||
pRange.getIDispatch(), "Value", varText);
|
||||
|
||||
return hr;
|
||||
}
|
||||
|
||||
public Application getApplication() {
|
||||
VARIANT.ByReference result = new VARIANT.ByReference();
|
||||
HRESULT hr = oleMethod(OleAuto.DISPATCH_PROPERTYGET, result,
|
||||
this.iDispatch, "Application");
|
||||
|
||||
COMUtils.SUCCEEDED(hr);
|
||||
return new Application((IDispatch) result.getValue());
|
||||
}
|
||||
|
||||
public ActiveWorkbook getActiveWorkbook() {
|
||||
VARIANT.ByReference result = new VARIANT.ByReference();
|
||||
HRESULT hr = oleMethod(OleAuto.DISPATCH_PROPERTYGET, result,
|
||||
this.iDispatch, "ActiveWorkbook");
|
||||
|
||||
COMUtils.SUCCEEDED(hr);
|
||||
return new ActiveWorkbook((IDispatch) result.getValue());
|
||||
}
|
||||
|
||||
public Workbooks getWorkbooks() {
|
||||
// GetDocuments
|
||||
VARIANT.ByReference result = new VARIANT.ByReference();
|
||||
HRESULT hr = oleMethod(OleAuto.DISPATCH_PROPERTYGET, result,
|
||||
this.iDispatch, "WorkBooks");
|
||||
|
||||
COMUtils.SUCCEEDED(hr);
|
||||
return new Workbooks((IDispatch) result.getValue());
|
||||
}
|
||||
|
||||
public ActiveSheet getActiveSheet() {
|
||||
VARIANT.ByReference result = new VARIANT.ByReference();
|
||||
HRESULT hr = oleMethod(OleAuto.DISPATCH_PROPERTYGET, result,
|
||||
this.iDispatch, "ActiveSheet");
|
||||
|
||||
COMUtils.SUCCEEDED(hr);
|
||||
return new ActiveSheet((IDispatch) result.getValue());
|
||||
}
|
||||
|
||||
public class Application extends COMObject {
|
||||
|
||||
public Application(IDispatch iDispatch) throws COMException {
|
||||
super(iDispatch);
|
||||
}
|
||||
}
|
||||
|
||||
public class Workbooks extends COMObject {
|
||||
|
||||
public Workbooks(IDispatch iDispatch) throws COMException {
|
||||
super(iDispatch);
|
||||
}
|
||||
}
|
||||
|
||||
public class ActiveWorkbook extends COMObject {
|
||||
|
||||
public ActiveWorkbook(IDispatch iDispatch) throws COMException {
|
||||
super(iDispatch);
|
||||
}
|
||||
}
|
||||
|
||||
public class ActiveSheet extends COMObject {
|
||||
|
||||
public ActiveSheet(IDispatch iDispatch) throws COMException {
|
||||
super(iDispatch);
|
||||
}
|
||||
}
|
||||
|
||||
public class Range extends COMObject {
|
||||
|
||||
public Range(IDispatch iDispatch) throws COMException {
|
||||
super(iDispatch);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,80 @@
|
||||
package com.sun.jna.platform.win32.office;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
import com.sun.jna.platform.win32.Variant;
|
||||
import com.sun.jna.platform.win32.COM.COMException;
|
||||
|
||||
public class MSOfficeDemo {
|
||||
|
||||
/**
|
||||
* @param args
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
new MSOfficeDemo();
|
||||
}
|
||||
|
||||
private String currentWorkingDir = new File("").getAbsolutePath()
|
||||
+ File.separator;
|
||||
|
||||
public MSOfficeDemo() {
|
||||
//this.testMSWord();
|
||||
this.testMSExcel();
|
||||
}
|
||||
|
||||
public void testMSWord() {
|
||||
MSWord msWord = null;
|
||||
|
||||
try {
|
||||
msWord = new MSWord();
|
||||
System.out.println("MSWord version: " + msWord.getVersion());
|
||||
msWord.setVisible(Variant.VARIANT_TRUE);
|
||||
msWord.newDocument();
|
||||
//msWord.openDocument(currentWorkingDir + "jnatest.doc", true);
|
||||
msWord.insertText("Hello from JNA!");
|
||||
// close and save the document
|
||||
msWord.closeActiveDocument(Variant.VARIANT_TRUE);
|
||||
// wait then close word
|
||||
msWord.quit();
|
||||
} catch (COMException e) {
|
||||
if (e.getExcepInfo() != null) {
|
||||
System.out
|
||||
.println("bstrSource: " + e.getExcepInfo().bstrSource);
|
||||
System.out.println("bstrDescription: "
|
||||
+ e.getExcepInfo().bstrDescription);
|
||||
} else
|
||||
e.printStackTrace();
|
||||
|
||||
if(msWord != null)
|
||||
msWord.quit();
|
||||
}
|
||||
}
|
||||
|
||||
public void testMSExcel() {
|
||||
MSExcel msExcel = null;
|
||||
|
||||
try {
|
||||
msExcel = new MSExcel();
|
||||
System.out.println("MSExcel version: " + msExcel.getVersion());
|
||||
msExcel.setVisible(Variant.VARIANT_TRUE);
|
||||
//msExcel.newExcelBook();
|
||||
msExcel.openExcelBook(currentWorkingDir + "jnatest.xls", true);
|
||||
msExcel.insertValue("A1", "Hello from JNA!");
|
||||
// close and save the active sheet
|
||||
msExcel.closeActiveWorkbook(Variant.VARIANT_TRUE);
|
||||
// wait then close excel
|
||||
msExcel.quit();
|
||||
} catch (COMException e) {
|
||||
if (e.getExcepInfo() != null) {
|
||||
System.out
|
||||
.println("bstrSource: " + e.getExcepInfo().bstrSource);
|
||||
System.out.println("bstrDescription: "
|
||||
+ e.getExcepInfo().bstrDescription);
|
||||
} else
|
||||
e.printStackTrace();
|
||||
|
||||
if(msExcel != null)
|
||||
msExcel.quit();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,145 @@
|
||||
package com.sun.jna.platform.win32.office;
|
||||
|
||||
import com.sun.jna.platform.win32.OaIdl.VARIANT_BOOL;
|
||||
import com.sun.jna.platform.win32.OleAuto;
|
||||
import com.sun.jna.platform.win32.Variant;
|
||||
import com.sun.jna.platform.win32.Variant.VARIANT;
|
||||
import com.sun.jna.platform.win32.WTypes.BSTR;
|
||||
import com.sun.jna.platform.win32.WinNT.HRESULT;
|
||||
import com.sun.jna.platform.win32.COM.COMException;
|
||||
import com.sun.jna.platform.win32.COM.COMObject;
|
||||
import com.sun.jna.platform.win32.COM.COMUtils;
|
||||
import com.sun.jna.platform.win32.COM.IDispatch;
|
||||
|
||||
public class MSWord extends COMObject {
|
||||
|
||||
public MSWord() throws COMException {
|
||||
super("Word.Application", false);
|
||||
}
|
||||
|
||||
public MSWord(boolean visible) throws COMException {
|
||||
this();
|
||||
this.setVisible(Variant.VARIANT_TRUE);
|
||||
}
|
||||
|
||||
public void setVisible(VARIANT_BOOL bVisible) throws COMException {
|
||||
VARIANT.ByReference result = new VARIANT.ByReference();
|
||||
this.oleMethod(OleAuto.DISPATCH_PROPERTYPUT, result, this.iDispatch,
|
||||
"Visible", new VARIANT(bVisible));
|
||||
}
|
||||
|
||||
public String getVersion() throws COMException {
|
||||
VARIANT.ByReference result = new VARIANT.ByReference();
|
||||
this.oleMethod(OleAuto.DISPATCH_PROPERTYGET, result, this.iDispatch,
|
||||
"Version");
|
||||
|
||||
return result.getValue().toString();
|
||||
}
|
||||
|
||||
public HRESULT newDocument() throws COMException {
|
||||
HRESULT hr = oleMethod(OleAuto.DISPATCH_METHOD, null,
|
||||
getDocuments().getIDispatch(), "Add");
|
||||
|
||||
return hr;
|
||||
}
|
||||
|
||||
public HRESULT openDocument(String filename, boolean bVisible)
|
||||
throws COMException {
|
||||
// OpenDocument
|
||||
BSTR bstrFilename = OleAuto.INSTANCE.SysAllocString(filename);
|
||||
VARIANT varFilename = new VARIANT(bstrFilename);
|
||||
HRESULT hr = oleMethod(OleAuto.DISPATCH_METHOD, null,
|
||||
getDocuments().getIDispatch(), "Open", varFilename);
|
||||
|
||||
return hr;
|
||||
}
|
||||
|
||||
public HRESULT closeActiveDocument(VARIANT_BOOL bSave)
|
||||
throws COMException {
|
||||
|
||||
HRESULT hr = oleMethod(OleAuto.DISPATCH_METHOD, null,
|
||||
getActiveDocument().getIDispatch(), "Close", new VARIANT(bSave));
|
||||
|
||||
return hr;
|
||||
}
|
||||
|
||||
public HRESULT quit() throws COMException {
|
||||
HRESULT hr = this.oleMethod(OleAuto.DISPATCH_METHOD, null,
|
||||
this.iDispatch, "Quit");
|
||||
|
||||
COMUtils.SUCCEEDED(hr);
|
||||
return hr;
|
||||
}
|
||||
|
||||
public HRESULT insertText(String text) throws COMException {
|
||||
HRESULT hr;
|
||||
|
||||
VARIANT.ByReference result = new VARIANT.ByReference();
|
||||
hr = oleMethod(OleAuto.DISPATCH_PROPERTYGET, result,
|
||||
this.iDispatch, "Selection");
|
||||
Selection pSelection = new Selection((IDispatch) result.getValue());
|
||||
|
||||
BSTR bstrText = OleAuto.INSTANCE.SysAllocString(text);
|
||||
VARIANT varText = new VARIANT(bstrText);
|
||||
hr = oleMethod(OleAuto.DISPATCH_METHOD, null,
|
||||
pSelection.getIDispatch(), "TypeText", varText);
|
||||
|
||||
return hr;
|
||||
}
|
||||
|
||||
public ActiveDocument getActiveDocument() {
|
||||
VARIANT.ByReference result = new VARIANT.ByReference();
|
||||
HRESULT hr = oleMethod(OleAuto.DISPATCH_PROPERTYGET, result, this.iDispatch,
|
||||
"ActiveDocument");
|
||||
|
||||
COMUtils.SUCCEEDED(hr);
|
||||
return new ActiveDocument((IDispatch) result.getValue());
|
||||
}
|
||||
|
||||
public Documents getDocuments() {
|
||||
// GetDocuments
|
||||
VARIANT.ByReference result = new VARIANT.ByReference();
|
||||
HRESULT hr = oleMethod(OleAuto.DISPATCH_PROPERTYGET, result, this.iDispatch,
|
||||
"Documents");
|
||||
|
||||
COMUtils.SUCCEEDED(hr);
|
||||
return new Documents((IDispatch) result.getValue());
|
||||
}
|
||||
|
||||
public Application getApplication() {
|
||||
VARIANT.ByReference result = new VARIANT.ByReference();
|
||||
HRESULT hr = oleMethod(OleAuto.DISPATCH_PROPERTYGET, result, this.iDispatch,
|
||||
"Application");
|
||||
|
||||
COMUtils.SUCCEEDED(hr);
|
||||
return new Application((IDispatch) result.getValue());
|
||||
}
|
||||
|
||||
public class Application extends COMObject {
|
||||
|
||||
public Application(IDispatch iDispatch) throws COMException {
|
||||
super(iDispatch);
|
||||
}
|
||||
}
|
||||
|
||||
public class Documents extends COMObject {
|
||||
|
||||
public Documents(IDispatch iDispatch) throws COMException {
|
||||
super(iDispatch);
|
||||
}
|
||||
}
|
||||
|
||||
public class ActiveDocument extends COMObject {
|
||||
|
||||
public ActiveDocument(IDispatch iDispatch) throws COMException {
|
||||
super(iDispatch);
|
||||
}
|
||||
}
|
||||
|
||||
public class Selection extends COMObject {
|
||||
|
||||
public Selection(IDispatch iDispatch) throws COMException {
|
||||
super(iDispatch);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<classpath>
|
||||
<classpathentry kind="src" path="src"/>
|
||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
|
||||
<classpathentry combineaccessrules="false" kind="src" path="/jnalib"/>
|
||||
<classpathentry kind="lib" path="C:/GitHub/jna-3.5.1.jar"/>
|
||||
<classpathentry kind="output" path="bin"/>
|
||||
</classpath>
|
||||
@@ -0,0 +1,17 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>native_window_msg</name>
|
||||
<comment></comment>
|
||||
<projects>
|
||||
</projects>
|
||||
<buildSpec>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.jdt.core.javabuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
</buildSpec>
|
||||
<natures>
|
||||
<nature>org.eclipse.jdt.core.javanature</nature>
|
||||
</natures>
|
||||
</projectDescription>
|
||||
@@ -0,0 +1,313 @@
|
||||
/* Copyright (c) 2012 Tobias Wolf, All Rights Reserved
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*/
|
||||
|
||||
package com.sun.jna.platform.win32;
|
||||
|
||||
import com.sun.jna.WString;
|
||||
import com.sun.jna.platform.win32.DBT;
|
||||
import com.sun.jna.platform.win32.DBT.DEV_BROADCAST_DEVICEINTERFACE;
|
||||
import com.sun.jna.platform.win32.Kernel32;
|
||||
import com.sun.jna.platform.win32.User32;
|
||||
import com.sun.jna.platform.win32.WinDef.HMODULE;
|
||||
import com.sun.jna.platform.win32.WinDef.HWND;
|
||||
import com.sun.jna.platform.win32.WinDef.LPARAM;
|
||||
import com.sun.jna.platform.win32.WinDef.LRESULT;
|
||||
import com.sun.jna.platform.win32.WinDef.WPARAM;
|
||||
import com.sun.jna.platform.win32.WinUser;
|
||||
import com.sun.jna.platform.win32.WinUser.HDEVNOTIFY;
|
||||
import com.sun.jna.platform.win32.WinUser.MSG;
|
||||
import com.sun.jna.platform.win32.WinUser.WNDCLASSEX;
|
||||
import com.sun.jna.platform.win32.WinUser.WindowProc;
|
||||
import com.sun.jna.platform.win32.Wtsapi32;
|
||||
|
||||
// TODO: Auto-generated Javadoc
|
||||
/**
|
||||
* The Class Win32WindowTest.
|
||||
*/
|
||||
public class Win32WindowDemo implements WindowProc {
|
||||
|
||||
/**
|
||||
* Instantiates a new win32 window test.
|
||||
*/
|
||||
public Win32WindowDemo() {
|
||||
// define new window class
|
||||
WString windowClass = new WString("MyWindowClass");
|
||||
HMODULE hInst = Kernel32.INSTANCE.GetModuleHandle("");
|
||||
|
||||
WNDCLASSEX wClass = new WNDCLASSEX();
|
||||
wClass.hInstance = hInst;
|
||||
wClass.lpfnWndProc = Win32WindowDemo.this;
|
||||
wClass.lpszClassName = windowClass;
|
||||
|
||||
// register window class
|
||||
User32.INSTANCE.RegisterClassEx(wClass);
|
||||
getLastError();
|
||||
|
||||
// create new window
|
||||
HWND hWnd = User32.INSTANCE
|
||||
.CreateWindowEx(
|
||||
User32.WS_EX_TOPMOST,
|
||||
windowClass,
|
||||
"My hidden helper window, used only to catch the windows events",
|
||||
0, 0, 0, 0, 0, WinUser.HWND_MESSAGE, null, hInst, null);
|
||||
|
||||
getLastError();
|
||||
System.out.println("window sucessfully created! window hwnd: "
|
||||
+ hWnd.getPointer().toString());
|
||||
|
||||
Wtsapi32.INSTANCE.WTSRegisterSessionNotification(hWnd,
|
||||
Wtsapi32.NOTIFY_FOR_THIS_SESSION);
|
||||
|
||||
/* this filters for all device classes */
|
||||
// DEV_BROADCAST_HDR notificationFilter = new DEV_BROADCAST_HDR();
|
||||
// notificationFilter.dbch_devicetype = DBT.DBT_DEVTYP_DEVICEINTERFACE;
|
||||
|
||||
/* this filters for all usb device classes */
|
||||
DEV_BROADCAST_DEVICEINTERFACE notificationFilter = new DEV_BROADCAST_DEVICEINTERFACE();
|
||||
notificationFilter.dbcc_devicetype = DBT.DBT_DEVTYP_DEVICEINTERFACE;
|
||||
notificationFilter.dbcc_classguid = DBT.GUID_DEVINTERFACE_USB_DEVICE;
|
||||
|
||||
/*
|
||||
* use User32.DEVICE_NOTIFY_ALL_INTERFACE_CLASSES instead of
|
||||
* DEVICE_NOTIFY_WINDOW_HANDLE to ignore the dbcc_classguid value
|
||||
*/
|
||||
HDEVNOTIFY hDevNotify = User32.INSTANCE.RegisterDeviceNotification(
|
||||
hWnd, notificationFilter, User32.DEVICE_NOTIFY_WINDOW_HANDLE);
|
||||
|
||||
getLastError();
|
||||
if (hDevNotify != null)
|
||||
System.out.println("RegisterDeviceNotification was sucessfully!");
|
||||
|
||||
MSG msg = new MSG();
|
||||
while (User32.INSTANCE.GetMessage(msg, hWnd, 0, 0) != 0) {
|
||||
User32.INSTANCE.TranslateMessage(msg);
|
||||
User32.INSTANCE.DispatchMessage(msg);
|
||||
}
|
||||
|
||||
User32.INSTANCE.UnregisterDeviceNotification(hDevNotify);
|
||||
Wtsapi32.INSTANCE.WTSUnRegisterSessionNotification(hWnd);
|
||||
User32.INSTANCE.UnregisterClass(windowClass, hInst);
|
||||
User32.INSTANCE.DestroyWindow(hWnd);
|
||||
|
||||
System.out.println("program exit!");
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see
|
||||
* com.sun.jna.platform.win32.User32.WindowProc#callback(com.sun.jna.platform
|
||||
* .win32.WinDef.HWND, int, com.sun.jna.platform.win32.WinDef.WPARAM,
|
||||
* com.sun.jna.platform.win32.WinDef.LPARAM)
|
||||
*/
|
||||
public LRESULT callback(HWND hwnd, int uMsg, WPARAM wParam, LPARAM lParam) {
|
||||
switch (uMsg) {
|
||||
case WinUser.WM_CREATE: {
|
||||
onCreate(wParam, lParam);
|
||||
return new LRESULT(0);
|
||||
}
|
||||
case WinUser.WM_DESTROY: {
|
||||
User32.INSTANCE.PostQuitMessage(0);
|
||||
return new LRESULT(0);
|
||||
}
|
||||
case WinUser.WM_SESSION_CHANGE: {
|
||||
this.onSessionChange(wParam, lParam);
|
||||
return new LRESULT(0);
|
||||
}
|
||||
case WinUser.WM_DEVICECHANGE: {
|
||||
this.onDeviceChange(wParam, lParam);
|
||||
return new LRESULT(0);
|
||||
}
|
||||
default:
|
||||
return User32.INSTANCE.DefWindowProc(hwnd, uMsg, wParam, lParam);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the last error.
|
||||
*
|
||||
* @return the last error
|
||||
*/
|
||||
public int getLastError() {
|
||||
int rc = Kernel32.INSTANCE.GetLastError();
|
||||
|
||||
if (rc != 0)
|
||||
System.out.println("error: " + rc);
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
/**
|
||||
* On session change.
|
||||
*
|
||||
* @param wParam
|
||||
* the w param
|
||||
* @param lParam
|
||||
* the l param
|
||||
*/
|
||||
protected void onSessionChange(WPARAM wParam, LPARAM lParam) {
|
||||
switch (wParam.intValue()) {
|
||||
case Wtsapi32.WTS_CONSOLE_CONNECT: {
|
||||
this.onConsoleConnect(lParam.intValue());
|
||||
break;
|
||||
}
|
||||
case Wtsapi32.WTS_CONSOLE_DISCONNECT: {
|
||||
this.onConsoleDisconnect(lParam.intValue());
|
||||
break;
|
||||
}
|
||||
case Wtsapi32.WTS_SESSION_LOGON: {
|
||||
this.onMachineLogon(lParam.intValue());
|
||||
break;
|
||||
}
|
||||
case Wtsapi32.WTS_SESSION_LOGOFF: {
|
||||
this.onMachineLogoff(lParam.intValue());
|
||||
break;
|
||||
}
|
||||
case Wtsapi32.WTS_SESSION_LOCK: {
|
||||
this.onMachineLocked(lParam.intValue());
|
||||
break;
|
||||
}
|
||||
case Wtsapi32.WTS_SESSION_UNLOCK: {
|
||||
this.onMachineUnlocked(lParam.intValue());
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* On console connect.
|
||||
*
|
||||
* @param sessionId
|
||||
* the session id
|
||||
*/
|
||||
protected void onConsoleConnect(int sessionId) {
|
||||
System.out.println("onConsoleConnect: " + sessionId);
|
||||
}
|
||||
|
||||
/**
|
||||
* On console disconnect.
|
||||
*
|
||||
* @param sessionId
|
||||
* the session id
|
||||
*/
|
||||
protected void onConsoleDisconnect(int sessionId) {
|
||||
System.out.println("onConsoleDisconnect: " + sessionId);
|
||||
}
|
||||
|
||||
/**
|
||||
* On machine locked.
|
||||
*
|
||||
* @param sessionId
|
||||
* the session id
|
||||
*/
|
||||
protected void onMachineLocked(int sessionId) {
|
||||
System.out.println("onMachineLocked: " + sessionId);
|
||||
}
|
||||
|
||||
/**
|
||||
* On machine unlocked.
|
||||
*
|
||||
* @param sessionId
|
||||
* the session id
|
||||
*/
|
||||
protected void onMachineUnlocked(int sessionId) {
|
||||
System.out.println("onMachineUnlocked: " + sessionId);
|
||||
}
|
||||
|
||||
/**
|
||||
* On machine logon.
|
||||
*
|
||||
* @param sessionId
|
||||
* the session id
|
||||
*/
|
||||
protected void onMachineLogon(int sessionId) {
|
||||
System.out.println("onMachineLogon: " + sessionId);
|
||||
}
|
||||
|
||||
/**
|
||||
* On machine logoff.
|
||||
*
|
||||
* @param sessionId
|
||||
* the session id
|
||||
*/
|
||||
protected void onMachineLogoff(int sessionId) {
|
||||
System.out.println("onMachineLogoff: " + sessionId);
|
||||
}
|
||||
|
||||
/**
|
||||
* On device change.
|
||||
*
|
||||
* @param wParam
|
||||
* the w param
|
||||
* @param lParam
|
||||
* the l param
|
||||
*/
|
||||
protected void onDeviceChange(WPARAM wParam, LPARAM lParam) {
|
||||
//
|
||||
// This is the actual message from the interface via Windows messaging.
|
||||
// This code includes some additional decoding for this particular
|
||||
// device type
|
||||
// and some common validation checks.
|
||||
//
|
||||
// Note that not all devices utilize these optional parameters in the
|
||||
// same
|
||||
// way. Refer to the extended information for your particular device
|
||||
// type
|
||||
// specified by your GUID.
|
||||
//
|
||||
DEV_BROADCAST_DEVICEINTERFACE bdif = new DEV_BROADCAST_DEVICEINTERFACE(
|
||||
lParam.longValue());
|
||||
System.out.println("dbcc_devicetype: " + bdif.dbcc_devicetype);
|
||||
System.out.println("dbcc_name: " + bdif.getDbcc_name());
|
||||
System.out.println("dbcc_classguid: "
|
||||
+ bdif.dbcc_classguid.toGuidString());
|
||||
|
||||
// Output some messages to the window.
|
||||
switch (wParam.intValue()) {
|
||||
case DBT.DBT_DEVICEARRIVAL:
|
||||
System.out.println("Message DBT_DEVICEARRIVAL");
|
||||
break;
|
||||
case DBT.DBT_DEVICEREMOVECOMPLETE:
|
||||
System.out.println("Message DBT_DEVICEREMOVECOMPLETE");
|
||||
break;
|
||||
case DBT.DBT_DEVNODES_CHANGED:
|
||||
System.out.println("Message DBT_DEVNODES_CHANGED");
|
||||
break;
|
||||
default:
|
||||
System.out
|
||||
.println("Message WM_DEVICECHANGE message received, value unhandled.");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* On create.
|
||||
*
|
||||
* @param wParam
|
||||
* the w param
|
||||
* @param lParam
|
||||
* the l param
|
||||
*/
|
||||
protected void onCreate(WPARAM wParam, LPARAM lParam) {
|
||||
System.out.println("onCreate: WM_CREATE");
|
||||
}
|
||||
|
||||
/**
|
||||
* The main method.
|
||||
*
|
||||
* @param args
|
||||
* the arguments
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
new Win32WindowDemo();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<classpath>
|
||||
<classpathentry kind="src" path="src"/>
|
||||
<classpathentry kind="src" output="build.eclipse/contrib-test-classes" path="test"/>
|
||||
<classpathentry exported="true" kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
|
||||
<classpathentry combineaccessrules="false" kind="src" path="/jnalib"/>
|
||||
<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/3"/>
|
||||
<classpathentry kind="lib" path="/jnalib/dist/jna.jar"/>
|
||||
<classpathentry kind="output" path="bin"/>
|
||||
</classpath>
|
||||
@@ -0,0 +1,17 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>ntservice</name>
|
||||
<comment></comment>
|
||||
<projects>
|
||||
</projects>
|
||||
<buildSpec>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.jdt.core.javabuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
</buildSpec>
|
||||
<natures>
|
||||
<nature>org.eclipse.jdt.core.javanature</nature>
|
||||
</natures>
|
||||
</projectDescription>
|
||||
+1
-1
@@ -19,7 +19,7 @@ is divided into following sections:
|
||||
- cleanup
|
||||
|
||||
-->
|
||||
<project name="JnaContrib-impl" default="default" basedir=".." xmlns:j2seproject3="http://www.netbeans.org/ns/j2se-project/3" xmlns:j2seproject2="http://www.netbeans.org/ns/j2se-project/2" xmlns:j2seproject1="http://www.netbeans.org/ns/j2se-project/1" xmlns:jaxws="http://www.netbeans.org/ns/jax-ws/1">
|
||||
<project name="ntservice-impl" default="default" basedir=".." xmlns:j2seproject3="http://www.netbeans.org/ns/j2se-project/3" xmlns:j2seproject2="http://www.netbeans.org/ns/j2se-project/2" xmlns:j2seproject1="http://www.netbeans.org/ns/j2se-project/1" xmlns:jaxws="http://www.netbeans.org/ns/jax-ws/1">
|
||||
<target name="default" depends="test,jar,javadoc" description="Build and test whole project."/>
|
||||
<!--
|
||||
======================
|
||||
+6
-5
@@ -14,17 +14,18 @@ debug.test.classpath=\
|
||||
${run.test.classpath}
|
||||
# This directory is removed when the project is cleaned:
|
||||
dist.dir=dist
|
||||
dist.jar=${dist.dir}/JnaContrib.jar
|
||||
dist.jar=${dist.dir}/contrib-ntservice.jar
|
||||
dist.javadoc.dir=${dist.dir}/javadoc
|
||||
file.reference.jna.jar=lib/jna.jar
|
||||
file.reference.jna.jar=../../build/jna.jar
|
||||
libs.junit.classpath=../../lib/junit.jar
|
||||
jar.compress=false
|
||||
javac.classpath=\
|
||||
${file.reference.jna.jar}
|
||||
${file.reference.jna.jar};
|
||||
# Space-separated list of extra javac options
|
||||
javac.compilerargs=
|
||||
javac.deprecation=false
|
||||
javac.source=1.6
|
||||
javac.target=1.6
|
||||
javac.source=1.5
|
||||
javac.target=1.5
|
||||
javac.test.classpath=\
|
||||
${javac.classpath}:\
|
||||
${build.classes.dir}:\
|
||||
+1
-1
@@ -3,7 +3,7 @@
|
||||
<type>org.netbeans.modules.java.j2seproject</type>
|
||||
<configuration>
|
||||
<data xmlns="http://www.netbeans.org/ns/j2se-project/3">
|
||||
<name>JnaContrib</name>
|
||||
<name>ntservice</name>
|
||||
<minimum-ant-version>1.6.5</minimum-ant-version>
|
||||
<source-roots>
|
||||
<root id="src.dir"/>
|
||||
@@ -0,0 +1,196 @@
|
||||
/*
|
||||
* Advapi32.java
|
||||
*
|
||||
* Created on 6. August 2007, 11:24
|
||||
*
|
||||
* To change this template, choose Tools | Template Manager
|
||||
* and open the template in the editor.
|
||||
*/
|
||||
|
||||
package jnacontrib.jna;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import com.sun.jna.Native;
|
||||
import com.sun.jna.Pointer;
|
||||
import com.sun.jna.Structure;
|
||||
import com.sun.jna.WString;
|
||||
import com.sun.jna.ptr.IntByReference;
|
||||
import com.sun.jna.win32.StdCallLibrary;
|
||||
import com.sun.jna.win32.W32APIOptions;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author TB
|
||||
*/
|
||||
public interface Advapi32 extends StdCallLibrary {
|
||||
Advapi32 INSTANCE = (Advapi32) Native.loadLibrary("Advapi32",
|
||||
Advapi32.class, W32APIOptions.UNICODE_OPTIONS);
|
||||
|
||||
/*
|
||||
* SC_HANDLE WINAPI OpenSCManager( LPCTSTR lpMachineName, LPCTSTR
|
||||
* lpDatabaseName, DWORD dwDesiredAccess );
|
||||
*/
|
||||
public Pointer OpenSCManager(String lpMachineName, WString lpDatabaseName,
|
||||
int dwDesiredAccess);
|
||||
|
||||
/*
|
||||
* BOOL WINAPI CloseServiceHandle( SC_HANDLE hSCObject );
|
||||
*/
|
||||
public boolean CloseServiceHandle(Pointer hSCObject);
|
||||
|
||||
/*
|
||||
* SC_HANDLE WINAPI OpenService( SC_HANDLE hSCManager, LPCTSTR
|
||||
* lpServiceName, DWORD dwDesiredAccess );
|
||||
*/
|
||||
public Pointer OpenService(Pointer hSCManager, String lpServiceName,
|
||||
int dwDesiredAccess);
|
||||
|
||||
/*
|
||||
* BOOL WINAPI StartService( SC_HANDLE hService, DWORD dwNumServiceArgs,
|
||||
* LPCTSTR* lpServiceArgVectors );
|
||||
*/
|
||||
public boolean StartService(Pointer hService, int dwNumServiceArgs,
|
||||
char[] lpServiceArgVectors);
|
||||
|
||||
/*
|
||||
* BOOL WINAPI ControlService( SC_HANDLE hService, DWORD dwControl,
|
||||
* LPSERVICE_STATUS lpServiceStatus );
|
||||
*/
|
||||
public boolean ControlService(Pointer hService, int dwControl,
|
||||
SERVICE_STATUS lpServiceStatus);
|
||||
|
||||
/*
|
||||
* BOOL WINAPI StartServiceCtrlDispatcher( const SERVICE_TABLE_ENTRY*
|
||||
* lpServiceTable );
|
||||
*/
|
||||
public boolean StartServiceCtrlDispatcher(Structure[] lpServiceTable);
|
||||
|
||||
/*
|
||||
* SERVICE_STATUS_HANDLE WINAPI RegisterServiceCtrlHandler( LPCTSTR
|
||||
* lpServiceName, LPHANDLER_FUNCTION lpHandlerProc );
|
||||
*/
|
||||
public Pointer RegisterServiceCtrlHandler(String lpServiceName,
|
||||
Handler lpHandlerProc);
|
||||
|
||||
/*
|
||||
* SERVICE_STATUS_HANDLE WINAPI RegisterServiceCtrlHandlerEx( LPCTSTR
|
||||
* lpServiceName, LPHANDLER_FUNCTION_EX lpHandlerProc, LPVOID lpContext );
|
||||
*/
|
||||
public Pointer RegisterServiceCtrlHandlerEx(String lpServiceName,
|
||||
HandlerEx lpHandlerProc, Pointer lpContext);
|
||||
|
||||
/*
|
||||
* BOOL WINAPI SetServiceStatus( SERVICE_STATUS_HANDLE hServiceStatus,
|
||||
* LPSERVICE_STATUS lpServiceStatus );
|
||||
*/
|
||||
public boolean SetServiceStatus(Pointer hServiceStatus,
|
||||
SERVICE_STATUS lpServiceStatus);
|
||||
|
||||
/*
|
||||
* SC_HANDLE WINAPI CreateService( SC_HANDLE hSCManager, LPCTSTR
|
||||
* lpServiceName, LPCTSTR lpDisplayName, DWORD dwDesiredAccess, DWORD
|
||||
* dwServiceType, DWORD dwStartType, DWORD dwErrorControl, LPCTSTR
|
||||
* lpBinaryPathName, LPCTSTR lpLoadOrderGroup, LPDWORD lpdwTagId, LPCTSTR
|
||||
* lpDependencies, LPCTSTR lpServiceStartName, LPCTSTR lpPassword );
|
||||
*/
|
||||
public Pointer CreateService(Pointer hSCManager, String lpServiceName,
|
||||
String lpDisplayName, int dwDesiredAccess, int dwServiceType,
|
||||
int dwStartType, int dwErrorControl, String lpBinaryPathName,
|
||||
String lpLoadOrderGroup, IntByReference lpdwTagId,
|
||||
String lpDependencies, String lpServiceStartName, String lpPassword);
|
||||
|
||||
/*
|
||||
* BOOL WINAPI DeleteService( SC_HANDLE hService );
|
||||
*/
|
||||
public boolean DeleteService(Pointer hService);
|
||||
|
||||
/*
|
||||
* BOOL WINAPI ChangeServiceConfig2( SC_HANDLE hService, DWORD dwInfoLevel,
|
||||
* LPVOID lpInfo );
|
||||
*/
|
||||
public boolean ChangeServiceConfig2(Pointer hService, int dwInfoLevel,
|
||||
ChangeServiceConfig2Info lpInfo);
|
||||
|
||||
/*
|
||||
* LONG WINAPI RegEnumValue( HKEY hKey, DWORD dwIndex, LPTSTR lpValueName,
|
||||
* LPDWORD lpcchValueName, LPDWORD lpReserved, LPDWORD lpType, LPBYTE
|
||||
* lpData, LPDWORD lpcbData );
|
||||
*/
|
||||
public int RegEnumValue(int hKey, int dwIndex, char[] lpValueName,
|
||||
IntByReference lpcchValueName, IntByReference reserved,
|
||||
IntByReference lpType, byte[] lpData, IntByReference lpcbData);
|
||||
|
||||
interface SERVICE_MAIN_FUNCTION extends StdCallCallback {
|
||||
/*
|
||||
* VOID WINAPI ServiceMain( DWORD dwArgc, LPTSTR* lpszArgv );
|
||||
*/
|
||||
public void callback(int dwArgc, Pointer lpszArgv);
|
||||
}
|
||||
|
||||
interface Handler extends StdCallCallback {
|
||||
/*
|
||||
* VOID WINAPI Handler( DWORD fdwControl );
|
||||
*/
|
||||
public void callback(int fdwControl);
|
||||
}
|
||||
|
||||
interface HandlerEx extends StdCallCallback {
|
||||
/*
|
||||
* DWORD WINAPI HandlerEx( DWORD dwControl, DWORD dwEventType, LPVOID
|
||||
* lpEventData, LPVOID lpContext );
|
||||
*/
|
||||
public int callback(int dwControl, int dwEventType,
|
||||
Pointer lpEventData, Pointer lpContext);
|
||||
}
|
||||
|
||||
/*
|
||||
* typedef struct _SERVICE_STATUS { DWORD dwServiceType; DWORD
|
||||
* dwCurrentState; DWORD dwControlsAccepted; DWORD dwWin32ExitCode; DWORD
|
||||
* dwServiceSpecificExitCode; DWORD dwCheckPoint; DWORD dwWaitHint; }
|
||||
* SERVICE_STATUS,LPSERVICE_STATUS;
|
||||
*/
|
||||
public static class SERVICE_STATUS extends Structure {
|
||||
public int dwServiceType;
|
||||
public int dwCurrentState;
|
||||
public int dwControlsAccepted;
|
||||
public int dwWin32ExitCode;
|
||||
public int dwServiceSpecificExitCode;
|
||||
public int dwCheckPoint;
|
||||
public int dwWaitHint;
|
||||
|
||||
protected List getFieldOrder() {
|
||||
return Arrays.asList(new String[] { "dwServiceType", "dwCurrentState", "dwControlsAccepted", "dwWin32ExitCode", "dwServiceSpecificExitCode", "dwCheckPoint", "dwWaitHint" });
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* typedef struct _SERVICE_TABLE_ENTRY { LPTSTR lpServiceName;
|
||||
* LPSERVICE_MAIN_FUNCTION lpServiceProc; } SERVICE_TABLE_ENTRY,
|
||||
* LPSERVICE_TABLE_ENTRY;
|
||||
*/
|
||||
public static class SERVICE_TABLE_ENTRY extends Structure {
|
||||
public String lpServiceName;
|
||||
public SERVICE_MAIN_FUNCTION lpServiceProc;
|
||||
|
||||
protected List getFieldOrder() {
|
||||
return Arrays.asList(new String[] { "lpServiceName", "lpServiceProc" });
|
||||
}
|
||||
}
|
||||
|
||||
public static abstract class ChangeServiceConfig2Info extends Structure {
|
||||
}
|
||||
|
||||
/*
|
||||
* typedef struct _SERVICE_DESCRIPTION { LPTSTR lpDescription; }
|
||||
* SERVICE_DESCRIPTION,LPSERVICE_DESCRIPTION;
|
||||
*/
|
||||
public static class SERVICE_DESCRIPTION extends ChangeServiceConfig2Info {
|
||||
public String lpDescription;
|
||||
|
||||
protected List getFieldOrder() {
|
||||
return Arrays.asList(new String[] { "lpDescription" });
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
/*
|
||||
* WINNT.java
|
||||
*
|
||||
* Created on 8. August 2007, 13:41
|
||||
*
|
||||
* To change this template, choose Tools | Template Manager
|
||||
* and open the template in the editor.
|
||||
*/
|
||||
|
||||
package jnacontrib.jna;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author TB
|
||||
*/
|
||||
public interface WINNT {
|
||||
public final static int DELETE = 0x00010000;
|
||||
public final static int READ_CONTROL = 0x00020000;
|
||||
public final static int WRITE_DAC = 0x00040000;
|
||||
public final static int WRITE_OWNER = 0x00080000;
|
||||
public final static int SYNCHRONIZE = 0x00100000;
|
||||
|
||||
public final static int STANDARD_RIGHTS_REQUIRED = 0x000F0000;
|
||||
|
||||
public final static int STANDARD_RIGHTS_READ = READ_CONTROL;
|
||||
public final static int STANDARD_RIGHTS_WRITE = READ_CONTROL;
|
||||
public final static int STANDARD_RIGHTS_EXECUTE = READ_CONTROL;
|
||||
|
||||
public final static int STANDARD_RIGHTS_ALL = 0x001F0000;
|
||||
|
||||
public final static int SPECIFIC_RIGHTS_ALL = 0x0000FFFF;
|
||||
|
||||
public final static int GENERIC_EXECUTE = 0x20000000;
|
||||
|
||||
public final static int SERVICE_WIN32_OWN_PROCESS = 0x00000010;
|
||||
}
|
||||
-5
@@ -9,11 +9,6 @@
|
||||
|
||||
package jnacontrib.jna;
|
||||
|
||||
import com.sun.jna.Pointer;
|
||||
import com.sun.jna.Structure;
|
||||
import com.sun.jna.ptr.PointerByReference;
|
||||
import com.sun.jna.win32.StdCallLibrary.StdCallCallback;
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
-1
@@ -180,7 +180,6 @@ public abstract class Win32Service {
|
||||
*/
|
||||
public void init() {
|
||||
Advapi32 advapi32;
|
||||
Advapi32.SERVICE_TABLE_ENTRY[] entries = new Advapi32.SERVICE_TABLE_ENTRY[2];
|
||||
Advapi32.SERVICE_TABLE_ENTRY entry;
|
||||
|
||||
serviceMain = new ServiceMain();
|
||||
@@ -0,0 +1,2 @@
|
||||
# placeholder
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<classpath>
|
||||
<classpathentry kind="src" path="src"/>
|
||||
<classpathentry kind="src" output="build.eclipse/contrib-test-classes" path="test"/>
|
||||
<classpathentry exported="true" kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
|
||||
<classpathentry combineaccessrules="false" kind="src" path="/jnalib"/>
|
||||
<classpathentry kind="lib" path="/jnalib/dist/jna.jar"/>
|
||||
<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/3"/>
|
||||
<classpathentry kind="output" path="bin"/>
|
||||
</classpath>
|
||||
@@ -0,0 +1,17 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>platform</name>
|
||||
<comment></comment>
|
||||
<projects>
|
||||
</projects>
|
||||
<buildSpec>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.jdt.core.javabuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
</buildSpec>
|
||||
<natures>
|
||||
<nature>org.eclipse.jdt.core.javanature</nature>
|
||||
</natures>
|
||||
</projectDescription>
|
||||
@@ -0,0 +1,108 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project name="platform" default="default" basedir=".">
|
||||
<description>Builds, tests, and runs the project platform.</description>
|
||||
<import file="nbproject/build-impl.xml"/>
|
||||
<!--
|
||||
|
||||
There exist several targets which are by default empty and which can be
|
||||
used for execution of your tasks. These targets are usually executed
|
||||
before and after some main targets. They are:
|
||||
|
||||
-pre-init: called before initialization of project properties
|
||||
-post-init: called after initialization of project properties
|
||||
-pre-compile: called before javac compilation
|
||||
-post-compile: called after javac compilation
|
||||
-pre-compile-single: called before javac compilation of single file
|
||||
-post-compile-single: called after javac compilation of single file
|
||||
-pre-compile-test: called before javac compilation of JUnit tests
|
||||
-post-compile-test: called after javac compilation of JUnit tests
|
||||
-pre-compile-test-single: called before javac compilation of single JUnit test
|
||||
-post-compile-test-single: called after javac compilation of single JUunit test
|
||||
-pre-jar: called before JAR building
|
||||
-post-jar: called after JAR building
|
||||
-post-clean: called after cleaning build products
|
||||
|
||||
(Targets beginning with '-' are not intended to be called on their own.)
|
||||
|
||||
Example of inserting an obfuscator after compilation could look like this:
|
||||
|
||||
<target name="-post-compile">
|
||||
<obfuscate>
|
||||
<fileset dir="${build.classes.dir}"/>
|
||||
</obfuscate>
|
||||
</target>
|
||||
|
||||
For list of available properties check the imported
|
||||
nbproject/build-impl.xml file.
|
||||
|
||||
|
||||
Another way to customize the build is by overriding existing main targets.
|
||||
The targets of interest are:
|
||||
|
||||
-init-macrodef-javac: defines macro for javac compilation
|
||||
-init-macrodef-junit: defines macro for junit execution
|
||||
-init-macrodef-debug: defines macro for class debugging
|
||||
-init-macrodef-java: defines macro for class execution
|
||||
-do-jar-with-manifest: JAR building (if you are using a manifest)
|
||||
-do-jar-without-manifest: JAR building (if you are not using a manifest)
|
||||
run: execution of project
|
||||
-javadoc-build: Javadoc generation
|
||||
test-report: JUnit report generation
|
||||
|
||||
An example of overriding the target for project execution could look like this:
|
||||
|
||||
<target name="run" depends="JnaContrib-impl.jar">
|
||||
<exec dir="bin" executable="launcher.exe">
|
||||
<arg file="${dist.jar}"/>
|
||||
</exec>
|
||||
</target>
|
||||
|
||||
Notice that the overridden target depends on the jar target and not only on
|
||||
the compile target as the regular run target does. Again, for a list of available
|
||||
properties which you can use, check the target you are overriding in the
|
||||
nbproject/build-impl.xml file.
|
||||
|
||||
-->
|
||||
<condition property="tests.platform" value="test-win32">
|
||||
<os family="windows"/>
|
||||
</condition>
|
||||
<condition property="tests.platform" value="test-osx">
|
||||
<os family="mac"/>
|
||||
</condition>
|
||||
<condition property="tests.platform" value="test-linux">
|
||||
<os family="unix"/>
|
||||
</condition>
|
||||
<target name="test" depends="init,compile-test" description="Run unit tests." if="tests.platform">
|
||||
<antcall target="${tests.platform}" />
|
||||
</target>
|
||||
<target name="test-report">
|
||||
<junitreport todir="${build.test.results.dir}">
|
||||
<fileset dir="${build.test.results.dir}">
|
||||
<include name="TEST-*.xml"/>
|
||||
</fileset>
|
||||
<report todir="${build.test.results.dir}"/>
|
||||
</junitreport>
|
||||
<property name="build.test.results.dir.abs" location="${build.test.results.dir}"/>
|
||||
<echo message="View test report in file://${build.test.results.dir.abs}/index.html" />
|
||||
</target>
|
||||
<target name="test-osx">
|
||||
<echo>No platform tests yet for OSX</echo>
|
||||
</target>
|
||||
<target name="test-win32" depends="-pre-test-run,-do-test-run,test-report,-post-test-run,-test-browse" />
|
||||
|
||||
<target name="test-linux" depends="-pre-test-run-single" >
|
||||
<!-- @todo How to ensure sys prop: jna.nosys=true is seen in tests? -->
|
||||
<!--<property name="test.includes" value="com/sun/jna/platform/**/*.java"/>-->
|
||||
<property name="test.includes" value="com/sun/jna/platform/StructureFieldOrderTest.java"/>
|
||||
|
||||
<property name="javac.includes" value="**/*"/>
|
||||
|
||||
<antcall target="test-single"/>
|
||||
|
||||
<!--
|
||||
<antcall target="test-report"/>
|
||||
<antcall target="-post-test-run"/>
|
||||
<antcall target="-test-browse"/>
|
||||
-->
|
||||
</target>
|
||||
</project>
|
||||
@@ -0,0 +1,541 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
*** GENERATED FROM project.xml - DO NOT EDIT ***
|
||||
*** EDIT ../build.xml INSTEAD ***
|
||||
|
||||
For the purpose of easier reading the script
|
||||
is divided into following sections:
|
||||
|
||||
- initialization
|
||||
- compilation
|
||||
- jar
|
||||
- execution
|
||||
- debugging
|
||||
- javadoc
|
||||
- junit compilation
|
||||
- junit execution
|
||||
- junit debugging
|
||||
- applet
|
||||
- cleanup
|
||||
|
||||
-->
|
||||
<project name="platform-impl" default="default" basedir=".." xmlns:j2seproject3="http://www.netbeans.org/ns/j2se-project/3" xmlns:j2seproject2="http://www.netbeans.org/ns/j2se-project/2" xmlns:j2seproject1="http://www.netbeans.org/ns/j2se-project/1" xmlns:jaxws="http://www.netbeans.org/ns/jax-ws/1">
|
||||
<target name="default" depends="test,jar,javadoc" description="Build and test whole project."/>
|
||||
<!--
|
||||
======================
|
||||
INITIALIZATION SECTION
|
||||
======================
|
||||
-->
|
||||
<target name="-pre-init">
|
||||
<!-- Empty placeholder for easier customization. -->
|
||||
<!-- You can override this target in the ../build.xml file. -->
|
||||
</target>
|
||||
<target name="-init-private" depends="-pre-init">
|
||||
<property file="nbproject/private/private.properties"/>
|
||||
</target>
|
||||
<target name="-init-user" depends="-pre-init,-init-private">
|
||||
<property file="${user.properties.file}"/>
|
||||
<!-- The two properties below are usually overridden -->
|
||||
<!-- by the active platform. Just a fallback. -->
|
||||
<property name="default.javac.source" value="1.4"/>
|
||||
<property name="default.javac.target" value="1.4"/>
|
||||
</target>
|
||||
<target name="-init-project" depends="-pre-init,-init-private,-init-user">
|
||||
<property file="nbproject/project.properties"/>
|
||||
</target>
|
||||
<target name="-do-init" depends="-pre-init,-init-private,-init-user,-init-project,-init-macrodef-property">
|
||||
<available file="${manifest.file}" property="manifest.available"/>
|
||||
<condition property="manifest.available+main.class">
|
||||
<and>
|
||||
<isset property="manifest.available"/>
|
||||
<isset property="main.class"/>
|
||||
<not>
|
||||
<equals arg1="${main.class}" arg2="" trim="true"/>
|
||||
</not>
|
||||
</and>
|
||||
</condition>
|
||||
<condition property="manifest.available+main.class+mkdist.available">
|
||||
<and>
|
||||
<istrue value="${manifest.available+main.class}"/>
|
||||
<isset property="libs.CopyLibs.classpath"/>
|
||||
</and>
|
||||
</condition>
|
||||
<condition property="have.tests">
|
||||
<or>
|
||||
<available file="${test.src.dir}"/>
|
||||
</or>
|
||||
</condition>
|
||||
<condition property="have.sources">
|
||||
<or>
|
||||
<available file="${src.dir}"/>
|
||||
</or>
|
||||
</condition>
|
||||
<condition property="netbeans.home+have.tests">
|
||||
<and>
|
||||
<isset property="netbeans.home"/>
|
||||
<isset property="have.tests"/>
|
||||
</and>
|
||||
</condition>
|
||||
<condition property="no.javadoc.preview">
|
||||
<isfalse value="${javadoc.preview}"/>
|
||||
</condition>
|
||||
<property name="run.jvmargs" value=""/>
|
||||
<property name="javac.compilerargs" value=""/>
|
||||
<property name="work.dir" value="${basedir}"/>
|
||||
<condition property="no.deps">
|
||||
<and>
|
||||
<istrue value="${no.dependencies}"/>
|
||||
</and>
|
||||
</condition>
|
||||
<property name="javac.debug" value="true"/>
|
||||
<property name="javadoc.preview" value="true"/>
|
||||
</target>
|
||||
<target name="-post-init">
|
||||
<!-- Empty placeholder for easier customization. -->
|
||||
<!-- You can override this target in the ../build.xml file. -->
|
||||
</target>
|
||||
<target name="-init-check" depends="-pre-init,-init-private,-init-user,-init-project,-do-init">
|
||||
<fail unless="src.dir">Must set src.dir</fail>
|
||||
<fail unless="test.src.dir">Must set test.src.dir</fail>
|
||||
<fail unless="build.dir">Must set build.dir</fail>
|
||||
<fail unless="dist.dir">Must set dist.dir</fail>
|
||||
<fail unless="build.classes.dir">Must set build.classes.dir</fail>
|
||||
<fail unless="dist.javadoc.dir">Must set dist.javadoc.dir</fail>
|
||||
<fail unless="build.test.classes.dir">Must set build.test.classes.dir</fail>
|
||||
<fail unless="build.test.results.dir">Must set build.test.results.dir</fail>
|
||||
<fail unless="build.classes.excludes">Must set build.classes.excludes</fail>
|
||||
<fail unless="dist.jar">Must set dist.jar</fail>
|
||||
</target>
|
||||
<target name="-init-macrodef-property">
|
||||
<macrodef name="property" uri="http://www.netbeans.org/ns/j2se-project/1">
|
||||
<attribute name="name"/>
|
||||
<attribute name="value"/>
|
||||
<sequential>
|
||||
<property name="@{name}" value="${@{value}}"/>
|
||||
</sequential>
|
||||
</macrodef>
|
||||
</target>
|
||||
<target name="-init-macrodef-javac">
|
||||
<macrodef name="javac" uri="http://www.netbeans.org/ns/j2se-project/3">
|
||||
<attribute name="srcdir" default="${src.dir}"/>
|
||||
<attribute name="destdir" default="${build.classes.dir}"/>
|
||||
<attribute name="classpath" default="${javac.classpath}"/>
|
||||
<attribute name="debug" default="${javac.debug}"/>
|
||||
<element name="customize" optional="true"/>
|
||||
<sequential>
|
||||
<javac srcdir="@{srcdir}" destdir="@{destdir}" debug="@{debug}" deprecation="${javac.deprecation}" source="${javac.source}" target="${javac.target}" includeantruntime="false">
|
||||
<classpath>
|
||||
<path path="@{classpath}"/>
|
||||
</classpath>
|
||||
<compilerarg line="${javac.compilerargs}"/>
|
||||
<customize/>
|
||||
</javac>
|
||||
</sequential>
|
||||
</macrodef>
|
||||
</target>
|
||||
<target name="-init-macrodef-junit">
|
||||
<macrodef name="junit" uri="http://www.netbeans.org/ns/j2se-project/3">
|
||||
<attribute name="includes" default="**/*Test.java"/>
|
||||
<sequential>
|
||||
<junit showoutput="true" fork="true" dir="${basedir}" failureproperty="tests.failed" errorproperty="tests.failed">
|
||||
<batchtest todir="${build.test.results.dir}">
|
||||
<fileset dir="${test.src.dir}" includes="@{includes}"/>
|
||||
</batchtest>
|
||||
<classpath>
|
||||
<path path="${run.test.classpath}"/>
|
||||
</classpath>
|
||||
<syspropertyset>
|
||||
<propertyref prefix="test-sys-prop."/>
|
||||
<mapper type="glob" from="test-sys-prop.*" to="*"/>
|
||||
</syspropertyset>
|
||||
<formatter type="brief" usefile="false"/>
|
||||
<formatter type="xml"/>
|
||||
<jvmarg line="${run.jvmargs}"/>
|
||||
</junit>
|
||||
</sequential>
|
||||
</macrodef>
|
||||
</target>
|
||||
<target name="-init-macrodef-nbjpda">
|
||||
<macrodef name="nbjpdastart" uri="http://www.netbeans.org/ns/j2se-project/1">
|
||||
<attribute name="name" default="${main.class}"/>
|
||||
<attribute name="classpath" default="${debug.classpath}"/>
|
||||
<attribute name="stopclassname" default=""/>
|
||||
<sequential>
|
||||
<nbjpdastart transport="dt_socket" addressproperty="jpda.address" name="@{name}" stopclassname="@{stopclassname}">
|
||||
<classpath>
|
||||
<path path="@{classpath}"/>
|
||||
</classpath>
|
||||
</nbjpdastart>
|
||||
</sequential>
|
||||
</macrodef>
|
||||
<macrodef name="nbjpdareload" uri="http://www.netbeans.org/ns/j2se-project/1">
|
||||
<attribute name="dir" default="${build.classes.dir}"/>
|
||||
<sequential>
|
||||
<nbjpdareload>
|
||||
<fileset includes="${fix.includes}*.class" dir="@{dir}"/>
|
||||
</nbjpdareload>
|
||||
</sequential>
|
||||
</macrodef>
|
||||
</target>
|
||||
<target name="-init-macrodef-debug">
|
||||
<macrodef name="debug" uri="http://www.netbeans.org/ns/j2se-project/3">
|
||||
<attribute name="classname" default="${main.class}"/>
|
||||
<attribute name="classpath" default="${debug.classpath}"/>
|
||||
<element name="customize" optional="true"/>
|
||||
<sequential>
|
||||
<java fork="true" classname="@{classname}" dir="${work.dir}">
|
||||
<jvmarg value="-Xdebug"/>
|
||||
<jvmarg value="-Xnoagent"/>
|
||||
<jvmarg value="-Djava.compiler=none"/>
|
||||
<jvmarg value="-Xrunjdwp:transport=dt_socket,address=${jpda.address}"/>
|
||||
<jvmarg line="${run.jvmargs}"/>
|
||||
<classpath>
|
||||
<path path="@{classpath}"/>
|
||||
</classpath>
|
||||
<syspropertyset>
|
||||
<propertyref prefix="run-sys-prop."/>
|
||||
<mapper type="glob" from="run-sys-prop.*" to="*"/>
|
||||
</syspropertyset>
|
||||
<customize/>
|
||||
</java>
|
||||
</sequential>
|
||||
</macrodef>
|
||||
</target>
|
||||
<target name="-init-macrodef-java">
|
||||
<macrodef name="java" uri="http://www.netbeans.org/ns/j2se-project/1">
|
||||
<attribute name="classname" default="${main.class}"/>
|
||||
<element name="customize" optional="true"/>
|
||||
<sequential>
|
||||
<java fork="true" classname="@{classname}" dir="${work.dir}">
|
||||
<jvmarg line="${run.jvmargs}"/>
|
||||
<classpath>
|
||||
<path path="${run.classpath}"/>
|
||||
</classpath>
|
||||
<syspropertyset>
|
||||
<propertyref prefix="run-sys-prop."/>
|
||||
<mapper type="glob" from="run-sys-prop.*" to="*"/>
|
||||
</syspropertyset>
|
||||
<customize/>
|
||||
</java>
|
||||
</sequential>
|
||||
</macrodef>
|
||||
</target>
|
||||
<target name="-init-presetdef-jar">
|
||||
<presetdef name="jar" uri="http://www.netbeans.org/ns/j2se-project/1">
|
||||
<jar jarfile="${dist.jar}" compress="${jar.compress}">
|
||||
<j2seproject1:fileset dir="${build.classes.dir}"/>
|
||||
</jar>
|
||||
</presetdef>
|
||||
</target>
|
||||
<target name="init" depends="-pre-init,-init-private,-init-user,-init-project,-do-init,-post-init,-init-check,-init-macrodef-property,-init-macrodef-javac,-init-macrodef-junit,-init-macrodef-nbjpda,-init-macrodef-debug,-init-macrodef-java,-init-presetdef-jar"/>
|
||||
<!--
|
||||
===================
|
||||
COMPILATION SECTION
|
||||
===================
|
||||
-->
|
||||
<target name="deps-jar" depends="init" unless="no.deps"/>
|
||||
<target name="-pre-pre-compile" depends="init,deps-jar">
|
||||
<mkdir dir="${build.classes.dir}"/>
|
||||
</target>
|
||||
<target name="-pre-compile">
|
||||
<!-- Empty placeholder for easier customization. -->
|
||||
<!-- You can override this target in the ../build.xml file. -->
|
||||
</target>
|
||||
<target name="-do-compile" depends="init,deps-jar,-pre-pre-compile,-pre-compile" if="have.sources">
|
||||
<j2seproject3:javac/>
|
||||
<copy todir="${build.classes.dir}">
|
||||
<fileset dir="${src.dir}" excludes="${build.classes.excludes}"/>
|
||||
</copy>
|
||||
</target>
|
||||
<target name="-post-compile">
|
||||
<!-- Empty placeholder for easier customization. -->
|
||||
<!-- You can override this target in the ../build.xml file. -->
|
||||
</target>
|
||||
<target name="compile" depends="init,deps-jar,-pre-pre-compile,-pre-compile,-do-compile,-post-compile" description="Compile project."/>
|
||||
<target name="-pre-compile-single">
|
||||
<!-- Empty placeholder for easier customization. -->
|
||||
<!-- You can override this target in the ../build.xml file. -->
|
||||
</target>
|
||||
<target name="-do-compile-single" depends="init,deps-jar,-pre-pre-compile">
|
||||
<fail unless="javac.includes">Must select some files in the IDE or set javac.includes</fail>
|
||||
<j2seproject3:javac>
|
||||
<customize>
|
||||
<patternset includes="${javac.includes}"/>
|
||||
</customize>
|
||||
</j2seproject3:javac>
|
||||
</target>
|
||||
<target name="-post-compile-single">
|
||||
<!-- Empty placeholder for easier customization. -->
|
||||
<!-- You can override this target in the ../build.xml file. -->
|
||||
</target>
|
||||
<target name="compile-single" depends="init,deps-jar,-pre-pre-compile,-pre-compile-single,-do-compile-single,-post-compile-single"/>
|
||||
<!--
|
||||
====================
|
||||
JAR BUILDING SECTION
|
||||
====================
|
||||
-->
|
||||
<target name="-pre-pre-jar" depends="init">
|
||||
<dirname property="dist.jar.dir" file="${dist.jar}"/>
|
||||
<mkdir dir="${dist.jar.dir}"/>
|
||||
</target>
|
||||
<target name="-pre-jar">
|
||||
<!-- Empty placeholder for easier customization. -->
|
||||
<!-- You can override this target in the ../build.xml file. -->
|
||||
</target>
|
||||
<target name="-do-jar-without-manifest" depends="init,compile,-pre-pre-jar,-pre-jar" unless="manifest.available">
|
||||
<j2seproject1:jar/>
|
||||
</target>
|
||||
<target name="-do-jar-with-manifest" depends="init,compile,-pre-pre-jar,-pre-jar" if="manifest.available" unless="manifest.available+main.class">
|
||||
<j2seproject1:jar manifest="${manifest.file}"/>
|
||||
</target>
|
||||
<target name="-do-jar-with-mainclass" depends="init,compile,-pre-pre-jar,-pre-jar" if="manifest.available+main.class" unless="manifest.available+main.class+mkdist.available">
|
||||
<j2seproject1:jar manifest="${manifest.file}">
|
||||
<j2seproject1:manifest>
|
||||
<j2seproject1:attribute name="Main-Class" value="${main.class}"/>
|
||||
</j2seproject1:manifest>
|
||||
</j2seproject1:jar>
|
||||
<echo>To run this application from the command line without Ant, try:</echo>
|
||||
<property name="build.classes.dir.resolved" location="${build.classes.dir}"/>
|
||||
<property name="dist.jar.resolved" location="${dist.jar}"/>
|
||||
<pathconvert property="run.classpath.with.dist.jar">
|
||||
<path path="${run.classpath}"/>
|
||||
<map from="${build.classes.dir.resolved}" to="${dist.jar.resolved}"/>
|
||||
</pathconvert>
|
||||
<echo>java -cp "${run.classpath.with.dist.jar}" ${main.class}</echo>
|
||||
</target>
|
||||
<target name="-do-jar-with-libraries" depends="init,compile,-pre-pre-jar,-pre-jar" if="manifest.available+main.class+mkdist.available">
|
||||
<property name="build.classes.dir.resolved" location="${build.classes.dir}"/>
|
||||
<pathconvert property="run.classpath.without.build.classes.dir">
|
||||
<path path="${run.classpath}"/>
|
||||
<map from="${build.classes.dir.resolved}" to=""/>
|
||||
</pathconvert>
|
||||
<pathconvert property="jar.classpath" pathsep=" ">
|
||||
<path path="${run.classpath.without.build.classes.dir}"/>
|
||||
<chainedmapper>
|
||||
<flattenmapper/>
|
||||
<globmapper from="*" to="lib/*"/>
|
||||
</chainedmapper>
|
||||
</pathconvert>
|
||||
<taskdef classname="org.netbeans.modules.java.j2seproject.copylibstask.CopyLibs" name="copylibs" classpath="${libs.CopyLibs.classpath}"/>
|
||||
<copylibs manifest="${manifest.file}" runtimeclasspath="${run.classpath.without.build.classes.dir}" jarfile="${dist.jar}" compress="${jar.compress}">
|
||||
<fileset dir="${build.classes.dir}"/>
|
||||
<manifest>
|
||||
<attribute name="Main-Class" value="${main.class}"/>
|
||||
<attribute name="Class-Path" value="${jar.classpath}"/>
|
||||
</manifest>
|
||||
</copylibs>
|
||||
<echo>To run this application from the command line without Ant, try:</echo>
|
||||
<property name="dist.jar.resolved" location="${dist.jar}"/>
|
||||
<echo>java -jar "${dist.jar.resolved}"</echo>
|
||||
</target>
|
||||
<target name="-post-jar">
|
||||
<!-- Empty placeholder for easier customization. -->
|
||||
<!-- You can override this target in the ../build.xml file. -->
|
||||
</target>
|
||||
<target name="jar" depends="init,compile,-pre-jar,-do-jar-with-manifest,-do-jar-without-manifest,-do-jar-with-mainclass,-do-jar-with-libraries,-post-jar" description="Build JAR."/>
|
||||
<!--
|
||||
=================
|
||||
EXECUTION SECTION
|
||||
=================
|
||||
-->
|
||||
<target name="run" depends="init,compile" description="Run a main class.">
|
||||
<j2seproject1:java>
|
||||
<customize>
|
||||
<arg line="${application.args}"/>
|
||||
</customize>
|
||||
</j2seproject1:java>
|
||||
</target>
|
||||
<target name="run-single" depends="init,compile-single">
|
||||
<fail unless="run.class">Must select one file in the IDE or set run.class</fail>
|
||||
<j2seproject1:java classname="${run.class}"/>
|
||||
</target>
|
||||
<!--
|
||||
=================
|
||||
DEBUGGING SECTION
|
||||
=================
|
||||
-->
|
||||
<target name="-debug-start-debugger" if="netbeans.home" depends="init">
|
||||
<j2seproject1:nbjpdastart name="${debug.class}"/>
|
||||
</target>
|
||||
<target name="-debug-start-debuggee" depends="init,compile">
|
||||
<j2seproject3:debug>
|
||||
<customize>
|
||||
<arg line="${application.args}"/>
|
||||
</customize>
|
||||
</j2seproject3:debug>
|
||||
</target>
|
||||
<target name="debug" if="netbeans.home" depends="init,compile,-debug-start-debugger,-debug-start-debuggee" description="Debug project in IDE."/>
|
||||
<target name="-debug-start-debugger-stepinto" if="netbeans.home" depends="init">
|
||||
<j2seproject1:nbjpdastart stopclassname="${main.class}"/>
|
||||
</target>
|
||||
<target name="debug-stepinto" if="netbeans.home" depends="init,compile,-debug-start-debugger-stepinto,-debug-start-debuggee"/>
|
||||
<target name="-debug-start-debuggee-single" if="netbeans.home" depends="init,compile-single">
|
||||
<fail unless="debug.class">Must select one file in the IDE or set debug.class</fail>
|
||||
<j2seproject3:debug classname="${debug.class}"/>
|
||||
</target>
|
||||
<target name="debug-single" if="netbeans.home" depends="init,compile-single,-debug-start-debugger,-debug-start-debuggee-single"/>
|
||||
<target name="-pre-debug-fix" depends="init">
|
||||
<fail unless="fix.includes">Must set fix.includes</fail>
|
||||
<property name="javac.includes" value="${fix.includes}.java"/>
|
||||
</target>
|
||||
<target name="-do-debug-fix" if="netbeans.home" depends="init,-pre-debug-fix,compile-single">
|
||||
<j2seproject1:nbjpdareload/>
|
||||
</target>
|
||||
<target name="debug-fix" if="netbeans.home" depends="init,-pre-debug-fix,-do-debug-fix"/>
|
||||
<!--
|
||||
===============
|
||||
JAVADOC SECTION
|
||||
===============
|
||||
-->
|
||||
<target name="-javadoc-build" depends="init">
|
||||
<mkdir dir="${dist.javadoc.dir}"/>
|
||||
<javadoc destdir="${dist.javadoc.dir}" source="${javac.source}" notree="${javadoc.notree}" use="${javadoc.use}" nonavbar="${javadoc.nonavbar}" noindex="${javadoc.noindex}" splitindex="${javadoc.splitindex}" author="${javadoc.author}" version="${javadoc.version}" windowtitle="${javadoc.windowtitle}" private="${javadoc.private}" additionalparam="${javadoc.additionalparam}" failonerror="true" useexternalfile="true">
|
||||
<classpath>
|
||||
<path path="${javac.classpath}"/>
|
||||
</classpath>
|
||||
<sourcepath>
|
||||
<pathelement location="${src.dir}"/>
|
||||
</sourcepath>
|
||||
<packageset dir="${src.dir}" includes="*/**"/>
|
||||
<fileset dir="${src.dir}" includes="*.java"/>
|
||||
</javadoc>
|
||||
</target>
|
||||
<target name="-javadoc-browse" if="netbeans.home" unless="no.javadoc.preview" depends="init,-javadoc-build">
|
||||
<nbbrowse file="${dist.javadoc.dir}/index.html"/>
|
||||
</target>
|
||||
<target name="javadoc" depends="init,-javadoc-build,-javadoc-browse" description="Build Javadoc."/>
|
||||
<!--
|
||||
=========================
|
||||
JUNIT COMPILATION SECTION
|
||||
=========================
|
||||
-->
|
||||
<target name="-pre-pre-compile-test" if="have.tests" depends="init,compile">
|
||||
<mkdir dir="${build.test.classes.dir}"/>
|
||||
</target>
|
||||
<target name="-pre-compile-test">
|
||||
<!-- Empty placeholder for easier customization. -->
|
||||
<!-- You can override this target in the ../build.xml file. -->
|
||||
</target>
|
||||
<target name="-do-compile-test" if="have.tests" depends="init,compile,-pre-pre-compile-test,-pre-compile-test">
|
||||
<j2seproject3:javac srcdir="${test.src.dir}" destdir="${build.test.classes.dir}" debug="true" classpath="${javac.test.classpath}"/>
|
||||
<copy todir="${build.test.classes.dir}">
|
||||
<fileset dir="${test.src.dir}" excludes="**/*.java"/>
|
||||
</copy>
|
||||
</target>
|
||||
<target name="-post-compile-test">
|
||||
<!-- Empty placeholder for easier customization. -->
|
||||
<!-- You can override this target in the ../build.xml file. -->
|
||||
</target>
|
||||
<target name="compile-test" depends="init,compile,-pre-pre-compile-test,-pre-compile-test,-do-compile-test,-post-compile-test"/>
|
||||
<target name="-pre-compile-test-single">
|
||||
<!-- Empty placeholder for easier customization. -->
|
||||
<!-- You can override this target in the ../build.xml file. -->
|
||||
</target>
|
||||
<target name="-do-compile-test-single" if="have.tests" depends="init,compile,-pre-pre-compile-test,-pre-compile-test-single">
|
||||
<fail unless="javac.includes">Must select some files in the IDE or set javac.includes</fail>
|
||||
<j2seproject3:javac srcdir="${test.src.dir}" destdir="${build.test.classes.dir}" debug="true" classpath="${javac.test.classpath}">
|
||||
<customize>
|
||||
<patternset includes="${javac.includes}"/>
|
||||
</customize>
|
||||
</j2seproject3:javac>
|
||||
<copy todir="${build.test.classes.dir}">
|
||||
<fileset dir="${test.src.dir}" excludes="**/*.java"/>
|
||||
</copy>
|
||||
</target>
|
||||
<target name="-post-compile-test-single">
|
||||
<!-- Empty placeholder for easier customization. -->
|
||||
<!-- You can override this target in the ../build.xml file. -->
|
||||
</target>
|
||||
<target name="compile-test-single" depends="init,compile,-pre-pre-compile-test,-pre-compile-test-single,-do-compile-test-single,-post-compile-test-single"/>
|
||||
<!--
|
||||
=======================
|
||||
JUNIT EXECUTION SECTION
|
||||
=======================
|
||||
-->
|
||||
<target name="-pre-test-run" if="have.tests" depends="init">
|
||||
<mkdir dir="${build.test.results.dir}"/>
|
||||
</target>
|
||||
<target name="-do-test-run" if="have.tests" depends="init,compile-test,-pre-test-run">
|
||||
<j2seproject3:junit/>
|
||||
</target>
|
||||
<target name="-post-test-run" if="have.tests" depends="init,compile-test,-pre-test-run,-do-test-run">
|
||||
<fail if="tests.failed">Some tests failed; see details above.</fail>
|
||||
</target>
|
||||
<target name="test-report" if="have.tests" depends="init"/>
|
||||
<target name="-test-browse" if="netbeans.home+have.tests" depends="init"/>
|
||||
<target name="test" depends="init,compile-test,-pre-test-run,-do-test-run,test-report,-post-test-run,-test-browse" description="Run unit tests."/>
|
||||
<target name="-pre-test-run-single" if="have.tests" depends="init">
|
||||
<mkdir dir="${build.test.results.dir}"/>
|
||||
</target>
|
||||
<target name="-do-test-run-single" if="have.tests" depends="init,compile-test-single,-pre-test-run-single">
|
||||
<fail unless="test.includes">Must select some files in the IDE or set test.includes</fail>
|
||||
<j2seproject3:junit includes="${test.includes}"/>
|
||||
</target>
|
||||
<target name="-post-test-run-single" if="have.tests" depends="init,compile-test-single,-pre-test-run-single,-do-test-run-single">
|
||||
<fail if="tests.failed">Some tests failed; see details above.</fail>
|
||||
</target>
|
||||
<target name="test-single" depends="init,compile-test-single,-pre-test-run-single,-do-test-run-single,-post-test-run-single" description="Run single unit test."/>
|
||||
<!--
|
||||
=======================
|
||||
JUNIT DEBUGGING SECTION
|
||||
=======================
|
||||
-->
|
||||
<target name="-debug-start-debuggee-test" if="have.tests" depends="init,compile-test">
|
||||
<fail unless="test.class">Must select one file in the IDE or set test.class</fail>
|
||||
<j2seproject3:debug classname="junit.textui.TestRunner" classpath="${debug.test.classpath}">
|
||||
<customize>
|
||||
<arg line="${test.class}"/>
|
||||
</customize>
|
||||
</j2seproject3:debug>
|
||||
</target>
|
||||
<target name="-debug-start-debugger-test" if="netbeans.home+have.tests" depends="init,compile-test">
|
||||
<j2seproject1:nbjpdastart name="${test.class}" classpath="${debug.test.classpath}"/>
|
||||
</target>
|
||||
<target name="debug-test" depends="init,compile-test,-debug-start-debugger-test,-debug-start-debuggee-test"/>
|
||||
<target name="-do-debug-fix-test" if="netbeans.home" depends="init,-pre-debug-fix,compile-test-single">
|
||||
<j2seproject1:nbjpdareload dir="${build.test.classes.dir}"/>
|
||||
</target>
|
||||
<target name="debug-fix-test" if="netbeans.home" depends="init,-pre-debug-fix,-do-debug-fix-test"/>
|
||||
<!--
|
||||
=========================
|
||||
APPLET EXECUTION SECTION
|
||||
=========================
|
||||
-->
|
||||
<target name="run-applet" depends="init,compile-single">
|
||||
<fail unless="applet.url">Must select one file in the IDE or set applet.url</fail>
|
||||
<j2seproject1:java classname="sun.applet.AppletViewer">
|
||||
<customize>
|
||||
<arg value="${applet.url}"/>
|
||||
</customize>
|
||||
</j2seproject1:java>
|
||||
</target>
|
||||
<!--
|
||||
=========================
|
||||
APPLET DEBUGGING SECTION
|
||||
=========================
|
||||
-->
|
||||
<target name="-debug-start-debuggee-applet" if="netbeans.home" depends="init,compile-single">
|
||||
<fail unless="applet.url">Must select one file in the IDE or set applet.url</fail>
|
||||
<j2seproject3:debug classname="sun.applet.AppletViewer">
|
||||
<customize>
|
||||
<arg value="${applet.url}"/>
|
||||
</customize>
|
||||
</j2seproject3:debug>
|
||||
</target>
|
||||
<target name="debug-applet" if="netbeans.home" depends="init,compile-single,-debug-start-debugger,-debug-start-debuggee-applet"/>
|
||||
<!--
|
||||
===============
|
||||
CLEANUP SECTION
|
||||
===============
|
||||
-->
|
||||
<target name="deps-clean" depends="init" unless="no.deps"/>
|
||||
<target name="-do-clean" depends="init">
|
||||
<delete dir="${build.dir}"/>
|
||||
<delete dir="${dist.dir}"/>
|
||||
</target>
|
||||
<target name="-post-clean">
|
||||
<!-- Empty placeholder for easier customization. -->
|
||||
<!-- You can override this target in the ../build.xml file. -->
|
||||
</target>
|
||||
<target name="clean" depends="init,deps-clean,-do-clean,-post-clean" description="Clean build products."/>
|
||||
</project>
|
||||
+70
-58
@@ -1,58 +1,70 @@
|
||||
application.args=
|
||||
build.classes.dir=${build.dir}/classes
|
||||
build.classes.excludes=**/*.java,**/*.form
|
||||
# This directory is removed when the project is cleaned:
|
||||
build.dir=build
|
||||
build.generated.dir=${build.dir}/generated
|
||||
# Only compile against the classpath explicitly listed here:
|
||||
build.sysclasspath=ignore
|
||||
build.test.classes.dir=${build.dir}/test/classes
|
||||
build.test.results.dir=${build.dir}/test/results
|
||||
debug.classpath=\
|
||||
${run.classpath}
|
||||
debug.test.classpath=\
|
||||
${run.test.classpath}
|
||||
# This directory is removed when the project is cleaned:
|
||||
dist.dir=dist
|
||||
dist.jar=${dist.dir}/jna.jar
|
||||
dist.javadoc.dir=${dist.dir}/javadoc
|
||||
excludes=
|
||||
file.reference.jnalib-src=src
|
||||
includes=**
|
||||
jar.compress=false
|
||||
javac.classpath=
|
||||
# Space-separated list of extra javac options
|
||||
javac.compilerargs=-Xlint:unchecked
|
||||
javac.deprecation=false
|
||||
javac.source=1.5
|
||||
javac.target=1.5
|
||||
javac.test.classpath=\
|
||||
${javac.classpath}:\
|
||||
${build.classes.dir}:\
|
||||
${libs.junit.classpath}}
|
||||
javadoc.additionalparam=
|
||||
javadoc.author=false
|
||||
javadoc.encoding=
|
||||
javadoc.noindex=false
|
||||
javadoc.nonavbar=false
|
||||
javadoc.notree=false
|
||||
javadoc.private=false
|
||||
javadoc.splitindex=true
|
||||
javadoc.use=true
|
||||
javadoc.version=false
|
||||
javadoc.windowtitle=
|
||||
main.class=
|
||||
meta.inf.dir=${src.dir}/META-INF
|
||||
platform.active=default_platform
|
||||
run.classpath=\
|
||||
${javac.classpath}:\
|
||||
${build.classes.dir}
|
||||
# Space-separated list of JVM arguments used when running the project
|
||||
# (you may also define separate properties like run-sys-prop.name=value instead of -Dname=value
|
||||
# or test-sys-prop.name=value to set system properties for unit tests):
|
||||
run.jvmargs=-Djava.library.path=./native/testlib/Debug;./native/jnidispatch/Debug
|
||||
run.test.classpath=\
|
||||
${javac.test.classpath}:\
|
||||
${build.test.classes.dir}
|
||||
src.dir=${file.reference.jnalib-src}
|
||||
test.src.dir=test
|
||||
application.args=
|
||||
build.classes.dir=${build.dir}/classes
|
||||
build.classes.excludes=**/*.java
|
||||
# This directory is removed when the project is cleaned:
|
||||
build.dir=build
|
||||
build.generated.dir=${build.dir}/generated
|
||||
# Only compile against the classpath explicitly listed here:
|
||||
build.sysclasspath=ignore
|
||||
build.test.classes.dir=${build.dir}/test/classes
|
||||
build.test.results.dir=${build.dir}/test/results
|
||||
debug.classpath=\
|
||||
${run.classpath}
|
||||
debug.test.classpath=\
|
||||
${run.test.classpath}
|
||||
# This directory is removed when the project is cleaned:
|
||||
dist.dir=dist
|
||||
dist.jar=${dist.dir}/platform.jar
|
||||
dist.javadoc.dir=${dist.dir}/javadoc
|
||||
file.reference.jna.jar=../../build/jna.jar
|
||||
file.reference.jna-d64.jar=../../build-d64/jna.jar
|
||||
file.reference.jna-test.jar=../../build/jna-test.jar
|
||||
file.reference.jna-test-d64.jar=../../build-d64/jna-test.jar
|
||||
libs.junit.classpath=../../lib/junit.jar
|
||||
jar.compress=false
|
||||
javac.classpath=\
|
||||
${file.reference.jna.jar}:\
|
||||
${file.reference.jna-d64.jar}
|
||||
# Space-separated list of extra javac options
|
||||
javac.compilerargs=
|
||||
javac.deprecation=false
|
||||
javac.source=1.5
|
||||
javac.target=1.5
|
||||
javac.test.classpath=\
|
||||
${javac.classpath}:\
|
||||
${file.reference.jna-test.jar}:\
|
||||
${file.reference.jna-test-d64.jar}:\
|
||||
${build.classes.dir}:\
|
||||
${libs.junit.classpath}
|
||||
javadoc.additionalparam=
|
||||
javadoc.author=false
|
||||
javadoc.encoding=
|
||||
javadoc.noindex=false
|
||||
javadoc.nonavbar=false
|
||||
javadoc.notree=false
|
||||
javadoc.private=false
|
||||
javadoc.splitindex=true
|
||||
javadoc.use=true
|
||||
javadoc.version=false
|
||||
javadoc.windowtitle=
|
||||
main.class=
|
||||
manifest.file=manifest.mf
|
||||
meta.inf.dir=${src.dir}/META-INF
|
||||
platform.active=default_platform
|
||||
run.classpath=\
|
||||
${javac.classpath}:\
|
||||
${build.classes.dir}
|
||||
# Space-separated list of JVM arguments used when running the project
|
||||
# (you may also define separate properties like run-sys-prop.name=value instead of -Dname=value
|
||||
# or test-sys-prop.name=value to set system properties for unit tests):
|
||||
run.jvmargs=
|
||||
run.test.classpath=\
|
||||
${javac.test.classpath}:\
|
||||
../../lib/test/reflections-0.9.8.jar:\
|
||||
../../lib/test/guava-11.0.2.jar:\
|
||||
../../lib/test/javassist-3.12.1.GA.jar:\
|
||||
../../lib/test/slf4j-api-1.6.1.jar:\
|
||||
../../lib/test/dom4j-1.6.1.jar:\
|
||||
${build.test.classes.dir}
|
||||
src.dir=src
|
||||
test.src.dir=test
|
||||
@@ -3,7 +3,7 @@
|
||||
<type>org.netbeans.modules.java.j2seproject</type>
|
||||
<configuration>
|
||||
<data xmlns="http://www.netbeans.org/ns/j2se-project/3">
|
||||
<name>JNA Library</name>
|
||||
<name>platform</name>
|
||||
<minimum-ant-version>1.6.5</minimum-ant-version>
|
||||
<source-roots>
|
||||
<root id="src.dir"/>
|
||||
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module version="4">
|
||||
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
||||
<exclude-output />
|
||||
<content url="file://$MODULE_DIR$">
|
||||
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/test" isTestSource="true" />
|
||||
</content>
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
</component>
|
||||
</module>
|
||||
|
||||
@@ -0,0 +1,135 @@
|
||||
/* Copyright (c) 2007 Timothy Wall, All Rights Reserved
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
* <p/>
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*/
|
||||
package com.sun.jna.platform;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.EventObject;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import com.sun.jna.platform.win32.W32FileMonitor;
|
||||
|
||||
/** Provides notification of file system changes. Actual capabilities may
|
||||
* vary slightly by platform.
|
||||
* <p>
|
||||
* Watched files which are removed from the filesystem are no longer watched.
|
||||
* @author twall
|
||||
*/
|
||||
|
||||
@SuppressWarnings("serial")
|
||||
public abstract class FileMonitor {
|
||||
|
||||
public static final int FILE_CREATED = 0x1;
|
||||
public static final int FILE_DELETED = 0x2;
|
||||
public static final int FILE_MODIFIED = 0x4;
|
||||
public static final int FILE_ACCESSED = 0x8;
|
||||
public static final int FILE_NAME_CHANGED_OLD = 0x10;
|
||||
public static final int FILE_NAME_CHANGED_NEW = 0x20;
|
||||
public static final int FILE_RENAMED = FILE_NAME_CHANGED_OLD|FILE_NAME_CHANGED_NEW;
|
||||
public static final int FILE_SIZE_CHANGED = 0x40;
|
||||
public static final int FILE_ATTRIBUTES_CHANGED = 0x80;
|
||||
public static final int FILE_SECURITY_CHANGED = 0x100;
|
||||
public static final int FILE_ANY = 0x1FF;
|
||||
|
||||
public interface FileListener {
|
||||
public void fileChanged(FileEvent e);
|
||||
}
|
||||
|
||||
public class FileEvent extends EventObject {
|
||||
private final File file;
|
||||
private final int type;
|
||||
public FileEvent(File file, int type) {
|
||||
super(FileMonitor.this);
|
||||
this.file = file;
|
||||
this.type = type;
|
||||
}
|
||||
public File getFile() { return file; }
|
||||
public int getType() { return type; }
|
||||
public String toString() {
|
||||
return "FileEvent: " + file + ":" + type;
|
||||
}
|
||||
}
|
||||
|
||||
private final Map<File, Integer> watched = new HashMap<File, Integer>();
|
||||
private List<FileListener> listeners = new ArrayList<FileListener>();
|
||||
|
||||
protected abstract void watch(File file, int mask, boolean recursive) throws IOException ;
|
||||
protected abstract void unwatch(File file);
|
||||
public abstract void dispose();
|
||||
|
||||
public void addWatch(File dir) throws IOException {
|
||||
addWatch(dir, FILE_ANY);
|
||||
}
|
||||
|
||||
public void addWatch(File dir, int mask) throws IOException {
|
||||
addWatch(dir, mask, dir.isDirectory());
|
||||
}
|
||||
|
||||
public void addWatch(File dir, int mask, boolean recursive) throws IOException {
|
||||
watched.put(dir, new Integer(mask));
|
||||
watch(dir, mask, recursive);
|
||||
}
|
||||
|
||||
public void removeWatch(File file) {
|
||||
if (watched.remove(file) != null) {
|
||||
unwatch(file);
|
||||
}
|
||||
}
|
||||
|
||||
protected void notify(FileEvent e) {
|
||||
for (FileListener listener : listeners) {
|
||||
listener.fileChanged(e);
|
||||
}
|
||||
}
|
||||
|
||||
public synchronized void addFileListener(FileListener listener) {
|
||||
List<FileListener> list = new ArrayList<FileListener>(listeners);
|
||||
list.add(listener);
|
||||
listeners = list;
|
||||
}
|
||||
|
||||
public synchronized void removeFileListener(FileListener x) {
|
||||
List<FileListener> list = new ArrayList<FileListener>(listeners);
|
||||
list.remove(x);
|
||||
listeners = list;
|
||||
}
|
||||
|
||||
protected void finalize() {
|
||||
for (File watchedFile : watched.keySet()) {
|
||||
removeWatch(watchedFile);
|
||||
}
|
||||
|
||||
dispose();
|
||||
}
|
||||
|
||||
/** Canonical lazy loading of a singleton. */
|
||||
private static class Holder {
|
||||
public static final FileMonitor INSTANCE;
|
||||
static {
|
||||
String os = System.getProperty("os.name");
|
||||
if (os.startsWith("Windows")) {
|
||||
INSTANCE = new W32FileMonitor();
|
||||
}
|
||||
else {
|
||||
throw new Error("FileMonitor not implemented for " + os);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static FileMonitor getInstance() {
|
||||
return Holder.INSTANCE;
|
||||
}
|
||||
}
|
||||
+7
-55
@@ -10,14 +10,15 @@
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*/
|
||||
package com.sun.jna.examples;
|
||||
package com.sun.jna.platform;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
import java.util.ArrayList;
|
||||
import com.sun.jna.examples.win32.Shell32;
|
||||
import com.sun.jna.examples.win32.Shell32.SHFILEOPSTRUCT;
|
||||
import java.util.List;
|
||||
|
||||
import com.sun.jna.platform.mac.MacFileUtils;
|
||||
import com.sun.jna.platform.win32.W32FileUtils;
|
||||
|
||||
/** Miscellaneous file utils not provided for by Java. */
|
||||
public abstract class FileUtils {
|
||||
@@ -50,56 +51,7 @@ public abstract class FileUtils {
|
||||
|
||||
public static FileUtils getInstance() {
|
||||
return Holder.INSTANCE;
|
||||
}
|
||||
|
||||
private static class W32FileUtils extends FileUtils {
|
||||
|
||||
public boolean hasTrash() { return true; }
|
||||
|
||||
public void moveToTrash(File[] files) throws IOException {
|
||||
Shell32 shell = Shell32.INSTANCE;
|
||||
SHFILEOPSTRUCT fileop = new SHFILEOPSTRUCT();
|
||||
fileop.wFunc = Shell32.FO_DELETE;
|
||||
String[] paths = new String[files.length];
|
||||
for (int i=0;i < paths.length;i++) {
|
||||
paths[i] = files[i].getAbsolutePath();
|
||||
}
|
||||
fileop.pFrom = fileop.encodePaths(paths);
|
||||
fileop.fFlags = Shell32.FOF_ALLOWUNDO|Shell32.FOF_NOCONFIRMATION|Shell32.FOF_SILENT;
|
||||
int ret = shell.SHFileOperation(fileop);
|
||||
if (ret != 0) {
|
||||
throw new IOException("Move to trash failed: " + ret);
|
||||
}
|
||||
if (fileop.fAnyOperationsAborted) {
|
||||
throw new IOException("Move to trash aborted");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static class MacFileUtils extends FileUtils {
|
||||
|
||||
public boolean hasTrash() { return true; }
|
||||
|
||||
public void moveToTrash(File[] files) throws IOException {
|
||||
// TODO: use native API for moving to trash (if any)
|
||||
File home = new File(System.getProperty("user.home"));
|
||||
File trash = new File(home, ".Trash");
|
||||
if (!trash.exists()) {
|
||||
throw new IOException("The Trash was not found in its expected location (" + trash + ")");
|
||||
}
|
||||
List failed = new ArrayList();
|
||||
for (int i=0;i < files.length;i++) {
|
||||
File src = files[i];
|
||||
File target = new File(trash, src.getName());
|
||||
if (!src.renameTo(target)) {
|
||||
failed.add(src);
|
||||
}
|
||||
}
|
||||
if (failed.size() > 0) {
|
||||
throw new IOException("The following files could not be trashed: " + failed);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static class DefaultFileUtils extends FileUtils {
|
||||
|
||||
@@ -138,7 +90,7 @@ public abstract class FileUtils {
|
||||
if (!trash.exists()) {
|
||||
throw new IOException("No trash location found (define fileutils.trash to be the path to the trash)");
|
||||
}
|
||||
List failed = new ArrayList();
|
||||
List<File> failed = new ArrayList<File>();
|
||||
for (int i=0;i < files.length;i++) {
|
||||
File src = files[i];
|
||||
File target = new File(trash, src.getName());
|
||||
+14
-13
@@ -10,16 +10,17 @@
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*/
|
||||
package com.sun.jna.examples;
|
||||
package com.sun.jna.platform;
|
||||
|
||||
import java.awt.GraphicsEnvironment;
|
||||
import java.awt.HeadlessException;
|
||||
import java.awt.event.KeyEvent;
|
||||
|
||||
import com.sun.jna.Platform;
|
||||
import com.sun.jna.examples.unix.X11;
|
||||
import com.sun.jna.examples.unix.X11.Display;
|
||||
import com.sun.jna.examples.win32.User32;
|
||||
import com.sun.jna.platform.unix.X11;
|
||||
import com.sun.jna.platform.unix.X11.Display;
|
||||
import com.sun.jna.platform.win32.User32;
|
||||
import com.sun.jna.platform.win32.WinUser;
|
||||
|
||||
/** Provide access to the local keyboard state. Note that this is meaningless
|
||||
* on a headless system and some VNC setups.
|
||||
@@ -71,30 +72,30 @@ public class KeyboardUtils {
|
||||
}
|
||||
if (code == KeyEvent.VK_SHIFT) {
|
||||
if ((loc & KeyEvent.KEY_LOCATION_RIGHT) != 0) {
|
||||
return User32.VK_RSHIFT;
|
||||
return WinUser.VK_RSHIFT;
|
||||
}
|
||||
if ((loc & KeyEvent.KEY_LOCATION_LEFT) != 0) {
|
||||
return User32.VK_LSHIFT;
|
||||
return WinUser.VK_LSHIFT;
|
||||
}
|
||||
return User32.VK_SHIFT;
|
||||
return WinUser.VK_SHIFT;
|
||||
}
|
||||
if (code == KeyEvent.VK_CONTROL) {
|
||||
if ((loc & KeyEvent.KEY_LOCATION_RIGHT) != 0) {
|
||||
return User32.VK_RCONTROL;
|
||||
return WinUser.VK_RCONTROL;
|
||||
}
|
||||
if ((loc & KeyEvent.KEY_LOCATION_LEFT) != 0) {
|
||||
return User32.VK_LCONTROL;
|
||||
return WinUser.VK_LCONTROL;
|
||||
}
|
||||
return User32.VK_CONTROL;
|
||||
return WinUser.VK_CONTROL;
|
||||
}
|
||||
if (code == KeyEvent.VK_ALT) {
|
||||
if ((loc & KeyEvent.KEY_LOCATION_RIGHT) != 0) {
|
||||
return User32.VK_RMENU;
|
||||
return WinUser.VK_RMENU;
|
||||
}
|
||||
if ((loc & KeyEvent.KEY_LOCATION_LEFT) != 0) {
|
||||
return User32.VK_LMENU;
|
||||
return WinUser.VK_LMENU;
|
||||
}
|
||||
return User32.VK_MENU;
|
||||
return WinUser.VK_MENU;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
+18
-18
@@ -11,7 +11,7 @@
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*/
|
||||
package com.sun.jna.examples;
|
||||
package com.sun.jna.platform;
|
||||
|
||||
import java.awt.Rectangle;
|
||||
import java.awt.image.DataBuffer;
|
||||
@@ -44,7 +44,7 @@ public class RasterRangesUtils {
|
||||
0x0008, 0x0004, 0x0002, 0x0001
|
||||
};
|
||||
|
||||
private static final Comparator COMPARATOR = new Comparator() {
|
||||
private static final Comparator<Object> COMPARATOR = new Comparator<Object>() {
|
||||
public int compare(Object o1, Object o2) {
|
||||
return ((Rectangle)o1).x - ((Rectangle)o2).x;
|
||||
}
|
||||
@@ -116,11 +116,11 @@ public class RasterRangesUtils {
|
||||
* @return true if the output succeeded, false otherwise
|
||||
*/
|
||||
public static boolean outputOccupiedRangesOfBinaryPixels(byte[] binaryBits, int w, int h, RangesOutput out) {
|
||||
Set rects = new HashSet();
|
||||
Set prevLine = Collections.EMPTY_SET;
|
||||
Set<Rectangle> rects = new HashSet<Rectangle>();
|
||||
Set<Rectangle> prevLine = Collections.EMPTY_SET;
|
||||
int scanlineBytes = binaryBits.length / h;
|
||||
for (int row = 0; row < h; row++) {
|
||||
Set curLine = new TreeSet(COMPARATOR);
|
||||
Set<Rectangle> curLine = new TreeSet<Rectangle>(COMPARATOR);
|
||||
int rowOffsetBytes = row * scanlineBytes;
|
||||
int startCol = -1;
|
||||
// Look at each batch of 8 columns in this row
|
||||
@@ -163,14 +163,14 @@ public class RasterRangesUtils {
|
||||
// end of last region
|
||||
curLine.add(new Rectangle(startCol, row, w - startCol, 1));
|
||||
}
|
||||
Set unmerged = mergeRects(prevLine, curLine);
|
||||
Set<Rectangle> unmerged = mergeRects(prevLine, curLine);
|
||||
rects.addAll(unmerged);
|
||||
prevLine = curLine;
|
||||
}
|
||||
// Add anything left over
|
||||
rects.addAll(prevLine);
|
||||
for (Iterator i=rects.iterator();i.hasNext();) {
|
||||
Rectangle r = (Rectangle)i.next();
|
||||
for (Iterator<Rectangle> i=rects.iterator();i.hasNext();) {
|
||||
Rectangle r = i.next();
|
||||
if (!out.outputRange(r.x, r.y, r.width, r.height)) {
|
||||
return false;
|
||||
}
|
||||
@@ -189,10 +189,10 @@ public class RasterRangesUtils {
|
||||
* @return true if the output succeeded, false otherwise
|
||||
*/
|
||||
public static boolean outputOccupiedRanges(int[] pixels, int w, int h, int occupationMask, RangesOutput out) {
|
||||
Set rects = new HashSet();
|
||||
Set prevLine = Collections.EMPTY_SET;
|
||||
Set<Rectangle> rects = new HashSet<Rectangle>();
|
||||
Set<Rectangle> prevLine = Collections.EMPTY_SET;
|
||||
for (int row = 0; row < h; row++) {
|
||||
Set curLine = new TreeSet(COMPARATOR);
|
||||
Set<Rectangle> curLine = new TreeSet<Rectangle>(COMPARATOR);
|
||||
int idxOffset = row * w;
|
||||
int startCol = -1;
|
||||
|
||||
@@ -213,14 +213,14 @@ public class RasterRangesUtils {
|
||||
// end of last region of current row
|
||||
curLine.add(new Rectangle(startCol, row, w-startCol, 1));
|
||||
}
|
||||
Set unmerged = mergeRects(prevLine, curLine);
|
||||
Set<Rectangle> unmerged = mergeRects(prevLine, curLine);
|
||||
rects.addAll(unmerged);
|
||||
prevLine = curLine;
|
||||
}
|
||||
// Add anything left over
|
||||
rects.addAll(prevLine);
|
||||
for (Iterator i=rects.iterator();i.hasNext();) {
|
||||
Rectangle r = (Rectangle)i.next();
|
||||
for (Iterator<Rectangle> i=rects.iterator();i.hasNext();) {
|
||||
Rectangle r = i.next();
|
||||
if (!out.outputRange(r.x, r.y, r.width, r.height)) {
|
||||
return false;
|
||||
}
|
||||
@@ -228,11 +228,11 @@ public class RasterRangesUtils {
|
||||
return true;
|
||||
}
|
||||
|
||||
private static Set mergeRects(Set prev, Set current) {
|
||||
Set unmerged = new HashSet(prev);
|
||||
private static Set<Rectangle> mergeRects(Set<Rectangle> prev, Set<Rectangle> current) {
|
||||
Set<Rectangle> unmerged = new HashSet<Rectangle>(prev);
|
||||
if (!prev.isEmpty() && !current.isEmpty()) {
|
||||
Rectangle[] pr = (Rectangle[])prev.toArray(new Rectangle[prev.size()]);
|
||||
Rectangle[] cr = (Rectangle[])current.toArray(new Rectangle[current.size()]);
|
||||
Rectangle[] pr = prev.toArray(new Rectangle[prev.size()]);
|
||||
Rectangle[] cr = current.toArray(new Rectangle[current.size()]);
|
||||
int ipr = 0;
|
||||
int icr = 0;
|
||||
while (ipr < pr.length && icr < cr.length) {
|
||||
+132
-93
@@ -11,12 +11,12 @@
|
||||
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*/
|
||||
package com.sun.jna.examples;
|
||||
package com.sun.jna.platform;
|
||||
|
||||
import java.awt.AWTEvent;
|
||||
import java.awt.AlphaComposite;
|
||||
import java.awt.BorderLayout;
|
||||
import java.awt.Color;
|
||||
import java.awt.Cursor;
|
||||
import java.awt.Component;
|
||||
import java.awt.Container;
|
||||
import java.awt.Dialog;
|
||||
@@ -31,14 +31,14 @@ import java.awt.Point;
|
||||
import java.awt.Rectangle;
|
||||
import java.awt.Shape;
|
||||
import java.awt.Toolkit;
|
||||
import java.awt.event.AWTEventListener;
|
||||
import java.awt.event.MouseEvent;
|
||||
import java.awt.AWTEvent;
|
||||
import java.awt.Window;
|
||||
import java.awt.event.AWTEventListener;
|
||||
import java.awt.event.ComponentEvent;
|
||||
import java.awt.event.ComponentListener;
|
||||
import java.awt.event.ContainerEvent;
|
||||
import java.awt.event.HierarchyEvent;
|
||||
import java.awt.event.HierarchyListener;
|
||||
import java.awt.event.MouseEvent;
|
||||
import java.awt.event.WindowAdapter;
|
||||
import java.awt.event.WindowEvent;
|
||||
import java.awt.geom.Area;
|
||||
@@ -62,24 +62,26 @@ import com.sun.jna.Native;
|
||||
import com.sun.jna.NativeLong;
|
||||
import com.sun.jna.Platform;
|
||||
import com.sun.jna.Pointer;
|
||||
import com.sun.jna.examples.unix.X11;
|
||||
import com.sun.jna.examples.unix.X11.Display;
|
||||
import com.sun.jna.examples.unix.X11.GC;
|
||||
import com.sun.jna.examples.unix.X11.Pixmap;
|
||||
import com.sun.jna.examples.unix.X11.XVisualInfo;
|
||||
import com.sun.jna.examples.unix.X11.Xext;
|
||||
import com.sun.jna.examples.unix.X11.Xrender.XRenderPictFormat;
|
||||
import com.sun.jna.examples.win32.GDI32;
|
||||
import com.sun.jna.examples.win32.User32;
|
||||
import com.sun.jna.examples.win32.GDI32.BITMAPINFO;
|
||||
import com.sun.jna.examples.win32.User32.BLENDFUNCTION;
|
||||
import com.sun.jna.examples.win32.User32.POINT;
|
||||
import com.sun.jna.examples.win32.User32.SIZE;
|
||||
import com.sun.jna.examples.win32.W32API.HANDLE;
|
||||
import com.sun.jna.examples.win32.W32API.HBITMAP;
|
||||
import com.sun.jna.examples.win32.W32API.HDC;
|
||||
import com.sun.jna.examples.win32.W32API.HRGN;
|
||||
import com.sun.jna.examples.win32.W32API.HWND;
|
||||
import com.sun.jna.platform.unix.X11;
|
||||
import com.sun.jna.platform.unix.X11.Display;
|
||||
import com.sun.jna.platform.unix.X11.GC;
|
||||
import com.sun.jna.platform.unix.X11.Pixmap;
|
||||
import com.sun.jna.platform.unix.X11.XVisualInfo;
|
||||
import com.sun.jna.platform.unix.X11.Xext;
|
||||
import com.sun.jna.platform.unix.X11.Xrender.XRenderPictFormat;
|
||||
import com.sun.jna.platform.win32.GDI32;
|
||||
import com.sun.jna.platform.win32.User32;
|
||||
import com.sun.jna.platform.win32.WinDef.HBITMAP;
|
||||
import com.sun.jna.platform.win32.WinDef.HDC;
|
||||
import com.sun.jna.platform.win32.WinDef.HRGN;
|
||||
import com.sun.jna.platform.win32.WinDef.HWND;
|
||||
import com.sun.jna.platform.win32.WinGDI;
|
||||
import com.sun.jna.platform.win32.WinGDI.BITMAPINFO;
|
||||
import com.sun.jna.platform.win32.WinNT.HANDLE;
|
||||
import com.sun.jna.platform.win32.WinUser;
|
||||
import com.sun.jna.platform.win32.WinUser.BLENDFUNCTION;
|
||||
import com.sun.jna.platform.win32.WinUser.POINT;
|
||||
import com.sun.jna.platform.win32.WinUser.SIZE;
|
||||
import com.sun.jna.ptr.ByteByReference;
|
||||
import com.sun.jna.ptr.IntByReference;
|
||||
import com.sun.jna.ptr.PointerByReference;
|
||||
@@ -149,6 +151,7 @@ public class WindowUtils {
|
||||
* </pre></code>
|
||||
*/
|
||||
private static class HeavyweightForcer extends Window {
|
||||
private static final long serialVersionUID = 1L;
|
||||
private final boolean packed;
|
||||
|
||||
public HeavyweightForcer(Window parent) {
|
||||
@@ -174,6 +177,7 @@ public class WindowUtils {
|
||||
* invoked whenever any part of the ancestor window is repainted.
|
||||
*/
|
||||
protected static class RepaintTrigger extends JComponent {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
protected class Listener
|
||||
extends WindowAdapter
|
||||
@@ -200,13 +204,18 @@ public class WindowUtils {
|
||||
}
|
||||
|
||||
public void eventDispatched(AWTEvent e) {
|
||||
Component src = (Component)e.getSource();
|
||||
MouseEvent me = SwingUtilities.convertMouseEvent(src, (MouseEvent)e, content);
|
||||
Component c = SwingUtilities.getDeepestComponentAt(content, me.getX(), me.getY());
|
||||
if (c != null) {
|
||||
setCursor(c.getCursor());
|
||||
if (e instanceof MouseEvent) {
|
||||
Component src = ((MouseEvent)e).getComponent();
|
||||
if (src != null
|
||||
&& SwingUtilities.isDescendingFrom(src, content)) {
|
||||
MouseEvent me = SwingUtilities.convertMouseEvent(src, (MouseEvent)e, content);
|
||||
Component c = SwingUtilities.getDeepestComponentAt(content, me.getX(), me.getY());
|
||||
if (c != null) {
|
||||
setCursor(c.getCursor());
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
private final Listener listener = createListener();
|
||||
@@ -257,9 +266,11 @@ public class WindowUtils {
|
||||
|
||||
/** Window utilities with differing native implementations. */
|
||||
public static abstract class NativeWindowUtils {
|
||||
protected abstract class TransparentContent extends JPanel {
|
||||
protected abstract class TransparentContentPane
|
||||
extends JPanel implements AWTEventListener {
|
||||
private static final long serialVersionUID = 1L;
|
||||
private boolean transparent;
|
||||
public TransparentContent(Container oldContent) {
|
||||
public TransparentContentPane(Container oldContent) {
|
||||
super(new BorderLayout());
|
||||
add(oldContent, BorderLayout.CENTER);
|
||||
setTransparent(true);
|
||||
@@ -267,12 +278,27 @@ public class WindowUtils {
|
||||
((JComponent)oldContent).setOpaque(false);
|
||||
}
|
||||
}
|
||||
public void addNotify() {
|
||||
super.addNotify();
|
||||
Toolkit.getDefaultToolkit().addAWTEventListener(this, AWTEvent.CONTAINER_EVENT_MASK);
|
||||
}
|
||||
public void removeNotify() {
|
||||
Toolkit.getDefaultToolkit().removeAWTEventListener(this);
|
||||
super.removeNotify();
|
||||
}
|
||||
public void setTransparent(boolean transparent) {
|
||||
this.transparent = transparent;
|
||||
setOpaque(!transparent);
|
||||
setDoubleBuffered(!transparent);
|
||||
repaint();
|
||||
}
|
||||
public void eventDispatched(AWTEvent e) {
|
||||
if (e.getID() == ContainerEvent.COMPONENT_ADDED
|
||||
&& SwingUtilities.isDescendingFrom(((ContainerEvent)e).getChild(), this)) {
|
||||
Component child = ((ContainerEvent)e).getChild();
|
||||
NativeWindowUtils.this.setDoubleBuffered(child, false);
|
||||
}
|
||||
}
|
||||
public void paint(Graphics gr) {
|
||||
if (transparent) {
|
||||
Rectangle r = gr.getClipBounds();
|
||||
@@ -438,6 +464,7 @@ public class WindowUtils {
|
||||
}
|
||||
|
||||
protected void setLayersTransparent(Window w, boolean transparent) {
|
||||
|
||||
Color bg = transparent ? new Color(0, 0, 0, 0) : null;
|
||||
if (w instanceof RootPaneContainer) {
|
||||
RootPaneContainer rpc = (RootPaneContainer)w;
|
||||
@@ -463,11 +490,15 @@ public class WindowUtils {
|
||||
}
|
||||
else {
|
||||
lp.setOpaque(Boolean.TRUE.equals(lp.getClientProperty(TRANSPARENT_OLD_OPAQUE)));
|
||||
lp.putClientProperty(TRANSPARENT_OLD_OPAQUE, null);
|
||||
root.setOpaque(Boolean.TRUE.equals(root.getClientProperty(TRANSPARENT_OLD_OPAQUE)));
|
||||
root.putClientProperty(TRANSPARENT_OLD_OPAQUE, null);
|
||||
if (content != null) {
|
||||
content.setOpaque(Boolean.TRUE.equals(content.getClientProperty(TRANSPARENT_OLD_OPAQUE)));
|
||||
content.putClientProperty(TRANSPARENT_OLD_OPAQUE, null);
|
||||
}
|
||||
bg = (Color)root.getClientProperty(TRANSPARENT_OLD_BG);
|
||||
root.putClientProperty(TRANSPARENT_OLD_BG, null);
|
||||
}
|
||||
}
|
||||
w.setBackground(bg);
|
||||
@@ -613,27 +644,27 @@ public class WindowUtils {
|
||||
public void run() {
|
||||
HWND hWnd = getHWnd(w);
|
||||
User32 user = User32.INSTANCE;
|
||||
int flags = user.GetWindowLong(hWnd, User32.GWL_EXSTYLE);
|
||||
int flags = user.GetWindowLong(hWnd, WinUser.GWL_EXSTYLE);
|
||||
byte level = (byte)((int)(255 * alpha) & 0xFF);
|
||||
if (usingUpdateLayeredWindow(w)) {
|
||||
// If already using UpdateLayeredWindow, continue to
|
||||
// do so
|
||||
BLENDFUNCTION blend = new BLENDFUNCTION();
|
||||
blend.SourceConstantAlpha = level;
|
||||
blend.AlphaFormat = User32.AC_SRC_ALPHA;
|
||||
blend.AlphaFormat = WinUser.AC_SRC_ALPHA;
|
||||
user.UpdateLayeredWindow(hWnd, null, null, null, null,
|
||||
null, 0, blend,
|
||||
User32.ULW_ALPHA);
|
||||
WinUser.ULW_ALPHA);
|
||||
}
|
||||
else if (alpha == 1f) {
|
||||
flags &= ~User32.WS_EX_LAYERED;
|
||||
user.SetWindowLong(hWnd, User32.GWL_EXSTYLE, flags);
|
||||
flags &= ~WinUser.WS_EX_LAYERED;
|
||||
user.SetWindowLong(hWnd, WinUser.GWL_EXSTYLE, flags);
|
||||
}
|
||||
else {
|
||||
flags |= User32.WS_EX_LAYERED;
|
||||
user.SetWindowLong(hWnd, User32.GWL_EXSTYLE, flags);
|
||||
flags |= WinUser.WS_EX_LAYERED;
|
||||
user.SetWindowLong(hWnd, WinUser.GWL_EXSTYLE, flags);
|
||||
user.SetLayeredWindowAttributes(hWnd, 0, level,
|
||||
User32.LWA_ALPHA);
|
||||
WinUser.LWA_ALPHA);
|
||||
}
|
||||
setForceHeavyweightPopups(w, alpha != 1f);
|
||||
storeAlpha(w, level);
|
||||
@@ -645,12 +676,13 @@ public class WindowUtils {
|
||||
* window on any change. It also does not paint window decorations
|
||||
* when the window is transparent.
|
||||
*/
|
||||
private class W32TransparentContent extends TransparentContent {
|
||||
private class W32TransparentContentPane extends TransparentContentPane {
|
||||
private static final long serialVersionUID = 1L;
|
||||
private HDC memDC;
|
||||
private HBITMAP hBitmap;
|
||||
private Pointer pbits;
|
||||
private Dimension bitmapSize;
|
||||
public W32TransparentContent(Container content) {
|
||||
public W32TransparentContentPane(Container content) {
|
||||
super(content);
|
||||
}
|
||||
private void disposeBackingStore() {
|
||||
@@ -702,12 +734,12 @@ public class WindowUtils {
|
||||
bmi.bmiHeader.biHeight = wh;
|
||||
bmi.bmiHeader.biPlanes = 1;
|
||||
bmi.bmiHeader.biBitCount = 32;
|
||||
bmi.bmiHeader.biCompression = GDI32.BI_RGB;
|
||||
bmi.bmiHeader.biCompression = WinGDI.BI_RGB;
|
||||
bmi.bmiHeader.biSizeImage = ww * wh * 4;
|
||||
PointerByReference ppbits = new PointerByReference();
|
||||
hBitmap = gdi.CreateDIBSection(memDC, bmi,
|
||||
GDI32.DIB_RGB_COLORS,
|
||||
ppbits, null, 0);
|
||||
WinGDI.DIB_RGB_COLORS,
|
||||
ppbits, null, 0);
|
||||
pbits = ppbits.getValue();
|
||||
bitmapSize = new Dimension(ww, wh);
|
||||
}
|
||||
@@ -743,18 +775,17 @@ public class WindowUtils {
|
||||
try {
|
||||
// GetLayeredwindowAttributes supported WinXP and later
|
||||
if (user.GetLayeredWindowAttributes(hWnd, null, bref, iref)
|
||||
&& (iref.getValue() & User32.LWA_ALPHA) != 0) {
|
||||
&& (iref.getValue() & WinUser.LWA_ALPHA) != 0) {
|
||||
level = bref.getValue();
|
||||
}
|
||||
}
|
||||
catch(UnsatisfiedLinkError e) {
|
||||
}
|
||||
blend.SourceConstantAlpha = level;
|
||||
blend.AlphaFormat = User32.AC_SRC_ALPHA;
|
||||
blend.AlphaFormat = WinUser.AC_SRC_ALPHA;
|
||||
user.UpdateLayeredWindow(hWnd, screenDC, winLoc, winSize, memDC,
|
||||
srcLoc, 0, blend, User32.ULW_ALPHA);
|
||||
}
|
||||
finally {
|
||||
srcLoc, 0, blend, WinUser.ULW_ALPHA);
|
||||
} finally {
|
||||
user.ReleaseDC(null, screenDC);
|
||||
if (memDC != null && oldBitmap != null) {
|
||||
gdi.SelectObject(memDC, oldBitmap);
|
||||
@@ -782,27 +813,27 @@ public class WindowUtils {
|
||||
public void run() {
|
||||
User32 user = User32.INSTANCE;
|
||||
HWND hWnd = getHWnd(w);
|
||||
int flags = user.GetWindowLong(hWnd, User32.GWL_EXSTYLE);
|
||||
int flags = user.GetWindowLong(hWnd, WinUser.GWL_EXSTYLE);
|
||||
JRootPane root = ((RootPaneContainer)w).getRootPane();
|
||||
JLayeredPane lp = root.getLayeredPane();
|
||||
Container content = root.getContentPane();
|
||||
if (content instanceof W32TransparentContent) {
|
||||
((W32TransparentContent)content).setTransparent(transparent);
|
||||
if (content instanceof W32TransparentContentPane) {
|
||||
((W32TransparentContentPane)content).setTransparent(transparent);
|
||||
}
|
||||
else if (transparent) {
|
||||
W32TransparentContent w32content =
|
||||
new W32TransparentContent(content);
|
||||
W32TransparentContentPane w32content =
|
||||
new W32TransparentContentPane(content);
|
||||
root.setContentPane(w32content);
|
||||
lp.add(new RepaintTrigger(w32content),
|
||||
JLayeredPane.DRAG_LAYER);
|
||||
}
|
||||
if (transparent && !usingUpdateLayeredWindow(w)) {
|
||||
flags |= User32.WS_EX_LAYERED;
|
||||
user.SetWindowLong(hWnd, User32.GWL_EXSTYLE, flags);
|
||||
flags |= WinUser.WS_EX_LAYERED;
|
||||
user.SetWindowLong(hWnd, WinUser.GWL_EXSTYLE, flags);
|
||||
}
|
||||
else if (!transparent && usingUpdateLayeredWindow(w)) {
|
||||
flags &= ~User32.WS_EX_LAYERED;
|
||||
user.SetWindowLong(hWnd, User32.GWL_EXSTYLE, flags);
|
||||
flags &= ~WinUser.WS_EX_LAYERED;
|
||||
user.SetWindowLong(hWnd, WinUser.GWL_EXSTYLE, flags);
|
||||
}
|
||||
setLayersTransparent(w, transparent);
|
||||
setForceHeavyweightPopups(w, transparent);
|
||||
@@ -843,11 +874,11 @@ public class WindowUtils {
|
||||
GDI32 gdi = GDI32.INSTANCE;
|
||||
PathIterator pi = area.getPathIterator(null);
|
||||
int mode = pi.getWindingRule() == PathIterator.WIND_NON_ZERO
|
||||
? GDI32.WINDING: GDI32.ALTERNATE;
|
||||
? WinGDI.WINDING: WinGDI.ALTERNATE;
|
||||
float[] coords = new float[6];
|
||||
List points = new ArrayList();
|
||||
List<POINT> points = new ArrayList<POINT>();
|
||||
int size = 0;
|
||||
List sizes = new ArrayList();
|
||||
List<Integer> sizes = new ArrayList<Integer>();
|
||||
while (!pi.isDone()) {
|
||||
int type = pi.currentSegment(coords);
|
||||
if (type == PathIterator.SEG_MOVETO) {
|
||||
@@ -867,14 +898,14 @@ public class WindowUtils {
|
||||
pi.next();
|
||||
}
|
||||
POINT[] lppt = (POINT[])new POINT().toArray(points.size());
|
||||
POINT[] pts = (POINT[])points.toArray(new POINT[points.size()]);
|
||||
POINT[] pts = points.toArray(new POINT[points.size()]);
|
||||
for (int i=0;i < lppt.length;i++) {
|
||||
lppt[i].x = pts[i].x;
|
||||
lppt[i].y = pts[i].y;
|
||||
}
|
||||
int[] counts = new int[sizes.size()];
|
||||
for (int i=0;i < counts.length;i++) {
|
||||
counts[i] = ((Integer)sizes.get(i)).intValue();
|
||||
counts[i] = sizes.get(i).intValue();
|
||||
}
|
||||
HRGN hrgn = gdi.CreatePolyPolygonRgn(lppt, counts, counts.length, mode);
|
||||
setWindowRegion(w, hrgn);
|
||||
@@ -891,7 +922,7 @@ public class WindowUtils {
|
||||
public boolean outputRange(int x, int y, int w, int h) {
|
||||
GDI32 gdi = GDI32.INSTANCE;
|
||||
gdi.SetRectRgn(tempRgn, x, y, x + w, y + h);
|
||||
return gdi.CombineRgn(region, region, tempRgn, GDI32.RGN_OR) != GDI32.ERROR;
|
||||
return gdi.CombineRgn(region, region, tempRgn, WinGDI.RGN_OR) != WinGDI.ERROR;
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -908,28 +939,28 @@ public class WindowUtils {
|
||||
return true;
|
||||
}
|
||||
|
||||
private OSXTransparentContent installTransparentContent(Window w) {
|
||||
OSXTransparentContent content;
|
||||
private OSXMaskingContentPane installMaskingPane(Window w) {
|
||||
OSXMaskingContentPane content;
|
||||
if (w instanceof RootPaneContainer) {
|
||||
// TODO: replace layered pane instead?
|
||||
final RootPaneContainer rpc = (RootPaneContainer)w;
|
||||
Container oldContent = rpc.getContentPane();
|
||||
if (oldContent instanceof OSXTransparentContent) {
|
||||
content = (OSXTransparentContent)oldContent;
|
||||
if (oldContent instanceof OSXMaskingContentPane) {
|
||||
content = (OSXMaskingContentPane)oldContent;
|
||||
}
|
||||
else {
|
||||
content = new OSXTransparentContent(oldContent);
|
||||
content = new OSXMaskingContentPane(oldContent);
|
||||
// TODO: listen for content pane changes
|
||||
rpc.setContentPane(content);
|
||||
}
|
||||
}
|
||||
else {
|
||||
Component oldContent = w.getComponentCount() > 0 ? w.getComponent(0) : null;
|
||||
if (oldContent instanceof OSXTransparentContent) {
|
||||
content = (OSXTransparentContent)oldContent;
|
||||
if (oldContent instanceof OSXMaskingContentPane) {
|
||||
content = (OSXMaskingContentPane)oldContent;
|
||||
}
|
||||
else {
|
||||
content = new OSXTransparentContent(oldContent);
|
||||
content = new OSXMaskingContentPane(oldContent);
|
||||
w.add(content);
|
||||
}
|
||||
}
|
||||
@@ -948,9 +979,7 @@ public class WindowUtils {
|
||||
boolean isTransparent = w.getBackground() != null
|
||||
&& w.getBackground().getAlpha() == 0;
|
||||
if (transparent != isTransparent) {
|
||||
installTransparentContent(w);
|
||||
setBackgroundTransparent(w, transparent, "setWindowTransparent");
|
||||
setLayersTransparent(w, transparent);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -984,7 +1013,7 @@ public class WindowUtils {
|
||||
fixWindowDragging(w, "setWindowAlpha");
|
||||
}
|
||||
whenDisplayable(w, new Runnable() {
|
||||
public void run() {
|
||||
public void run() {
|
||||
Object peer = w.getPeer();
|
||||
try {
|
||||
peer.getClass().getMethod("setAlpha", new Class[]{
|
||||
@@ -1012,7 +1041,7 @@ public class WindowUtils {
|
||||
public void setWindowMask(Component c, final Shape shape) {
|
||||
if (c instanceof Window) {
|
||||
Window w = (Window)c;
|
||||
OSXTransparentContent content = installTransparentContent(w);
|
||||
OSXMaskingContentPane content = installMaskingPane(w);
|
||||
content.setMask(shape);
|
||||
setBackgroundTransparent(w, shape != MASK_NONE, "setWindowMask");
|
||||
}
|
||||
@@ -1024,10 +1053,11 @@ public class WindowUtils {
|
||||
/** Mask out unwanted pixels and ensure background gets cleared.
|
||||
* @author Olivier Chafik
|
||||
*/
|
||||
private static class OSXTransparentContent extends JPanel {
|
||||
private static class OSXMaskingContentPane extends JPanel {
|
||||
private static final long serialVersionUID = 1L;
|
||||
private Shape shape;
|
||||
|
||||
public OSXTransparentContent(Component oldContent) {
|
||||
public OSXMaskingContentPane(Component oldContent) {
|
||||
super(new BorderLayout());
|
||||
if (oldContent != null) {
|
||||
add(oldContent, BorderLayout.CENTER);
|
||||
@@ -1061,13 +1091,21 @@ public class WindowUtils {
|
||||
? ((RootPaneContainer)w).getRootPane() : null;
|
||||
if (transparent) {
|
||||
if (rp != null) {
|
||||
rp.putClientProperty("bg.old", w.getBackground());
|
||||
rp.putClientProperty(TRANSPARENT_OLD_BG, w.getBackground());
|
||||
}
|
||||
w.setBackground(new Color(0,0,0,0));
|
||||
}
|
||||
else {
|
||||
if (rp != null) {
|
||||
w.setBackground((Color)rp.getClientProperty("bg.old"));
|
||||
Color bg = (Color)rp.getClientProperty(TRANSPARENT_OLD_BG);
|
||||
// If the old bg is a
|
||||
// apple.laf.CColorPaintUIResource, the window's
|
||||
// transparent state will not change
|
||||
if (bg != null) {
|
||||
bg = new Color(bg.getRed(), bg.getGreen(), bg.getBlue(), bg.getAlpha());
|
||||
}
|
||||
w.setBackground(bg);
|
||||
rp.putClientProperty(TRANSPARENT_OLD_BG, null);
|
||||
}
|
||||
else {
|
||||
w.setBackground(null);
|
||||
@@ -1091,7 +1129,7 @@ public class WindowUtils {
|
||||
}
|
||||
x11.XSetForeground(dpy, gc, new NativeLong(0));
|
||||
x11.XFillRectangle(dpy, pm, gc, 0, 0, width, height);
|
||||
final List rlist = new ArrayList();
|
||||
final List<Rectangle> rlist = new ArrayList<Rectangle>();
|
||||
try {
|
||||
RasterRangesUtils.outputOccupiedRanges(raster, new RasterRangesUtils.RangesOutput() {
|
||||
public boolean outputRange(int x, int y, int w, int h) {
|
||||
@@ -1102,7 +1140,7 @@ public class WindowUtils {
|
||||
X11.XRectangle[] rects = (X11.XRectangle[])
|
||||
new X11.XRectangle().toArray(rlist.size());
|
||||
for (int i=0;i < rects.length;i++) {
|
||||
Rectangle r = (Rectangle)rlist.get(i);
|
||||
Rectangle r = rlist.get(i);
|
||||
rects[i].x = (short)r.x;
|
||||
rects[i].y = (short)r.y;
|
||||
rects[i].width = (short)r.width;
|
||||
@@ -1197,7 +1235,7 @@ public class WindowUtils {
|
||||
IntByReference pcount = new IntByReference();
|
||||
info = x11.XGetVisualInfo(dpy, mask, template, pcount);
|
||||
if (info != null) {
|
||||
List list = new ArrayList();
|
||||
List<X11.VisualID> list = new ArrayList<X11.VisualID>();
|
||||
XVisualInfo[] infos =
|
||||
(XVisualInfo[])info.toArray(pcount.getValue());
|
||||
for (int i = 0; i < infos.length; i++) {
|
||||
@@ -1237,9 +1275,9 @@ public class WindowUtils {
|
||||
x11.XQueryTree(dpy, win, rootp, parentp, childrenp, countp);
|
||||
Pointer p = childrenp.getValue();
|
||||
int[] ids = p.getIntArray(0, countp.getValue());
|
||||
for (int i=0;i < ids.length;i++) {
|
||||
for (int id : ids) {
|
||||
// TODO: more verification of correct window?
|
||||
X11.Window child = new X11.Window(ids[i]);
|
||||
X11.Window child = new X11.Window(id);
|
||||
X11.XWindowAttributes xwa = new X11.XWindowAttributes();
|
||||
x11.XGetWindowAttributes(dpy, child, xwa);
|
||||
offset.x = -xwa.x;
|
||||
@@ -1300,9 +1338,10 @@ public class WindowUtils {
|
||||
whenDisplayable(w, action);
|
||||
}
|
||||
|
||||
private class X11TransparentContent extends TransparentContent {
|
||||
private class X11TransparentContentPane extends TransparentContentPane {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
public X11TransparentContent(Container oldContent) {
|
||||
public X11TransparentContentPane(Container oldContent) {
|
||||
super(oldContent);
|
||||
}
|
||||
|
||||
@@ -1312,7 +1351,7 @@ public class WindowUtils {
|
||||
// Painting directly to the original Graphics
|
||||
// fails to properly composite unless the destination
|
||||
// is pure black. Too bad.
|
||||
protected void paintDirect(BufferedImage buf, Rectangle bounds) {
|
||||
protected void paintDirect(BufferedImage buf, Rectangle bounds) {
|
||||
Window window = SwingUtilities.getWindowAncestor(this);
|
||||
X11 x11 = X11.INSTANCE;
|
||||
X11.Display dpy = x11.XOpenDisplay(null);
|
||||
@@ -1324,7 +1363,7 @@ public class WindowUtils {
|
||||
Raster raster = buf.getData();
|
||||
int w = bounds.width;
|
||||
int h = bounds.height;
|
||||
if (buffer == null || buffer.getSize() != w*h*4) {
|
||||
if (buffer == null || buffer.size() != w*h*4) {
|
||||
buffer = new Memory(w*h*4);
|
||||
pixels = new int[w*h];
|
||||
}
|
||||
@@ -1377,12 +1416,12 @@ public class WindowUtils {
|
||||
JRootPane root = ((RootPaneContainer)w).getRootPane();
|
||||
JLayeredPane lp = root.getLayeredPane();
|
||||
Container content = root.getContentPane();
|
||||
if (content instanceof X11TransparentContent) {
|
||||
((X11TransparentContent)content).setTransparent(transparent);
|
||||
if (content instanceof X11TransparentContentPane) {
|
||||
((X11TransparentContentPane)content).setTransparent(transparent);
|
||||
}
|
||||
else if (transparent) {
|
||||
X11TransparentContent x11content =
|
||||
new X11TransparentContent(content);
|
||||
X11TransparentContentPane x11content =
|
||||
new X11TransparentContentPane(content);
|
||||
root.setContentPane(x11content);
|
||||
lp.add(new RepaintTrigger(x11content),
|
||||
JLayeredPane.DRAG_LAYER);
|
||||
+4
-3
@@ -10,7 +10,7 @@
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*/
|
||||
package com.sun.jna.examples.dnd;
|
||||
package com.sun.jna.platform.dnd;
|
||||
|
||||
import java.awt.AlphaComposite;
|
||||
import java.awt.Component;
|
||||
@@ -38,6 +38,7 @@ import java.awt.dnd.DropTargetEvent;
|
||||
import java.awt.dnd.InvalidDnDOperationException;
|
||||
import java.awt.event.InputEvent;
|
||||
import java.awt.image.BufferedImage;
|
||||
|
||||
import javax.swing.Icon;
|
||||
import javax.swing.JColorChooser;
|
||||
import javax.swing.JFileChooser;
|
||||
@@ -179,7 +180,7 @@ public abstract class DragHandler
|
||||
private Component dragSource;
|
||||
private GhostedDragImage ghost;
|
||||
private Point imageOffset;
|
||||
private Dimension maxGhostSize = MAX_GHOST_SIZE;
|
||||
private Dimension maxGhostSize = MAX_GHOST_SIZE;
|
||||
private float ghostAlpha = DEFAULT_GHOST_ALPHA;
|
||||
|
||||
/** Enable drags from the given component, supporting the actions in
|
||||
@@ -529,4 +530,4 @@ public abstract class DragHandler
|
||||
}
|
||||
updateCursor(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
+3
-3
@@ -10,7 +10,7 @@
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*/
|
||||
package com.sun.jna.examples.dnd;
|
||||
package com.sun.jna.platform.dnd;
|
||||
|
||||
import java.awt.Component;
|
||||
import java.awt.Point;
|
||||
@@ -88,7 +88,7 @@ import java.util.Set;
|
||||
public abstract class DropHandler implements DropTargetListener {
|
||||
|
||||
private int acceptedActions;
|
||||
private List acceptedFlavors;
|
||||
private List<DataFlavor> acceptedFlavors;
|
||||
private DropTarget dropTarget;
|
||||
private boolean active = true;
|
||||
private DropTargetPainter painter;
|
||||
@@ -347,7 +347,7 @@ public abstract class DropHandler implements DropTargetListener {
|
||||
* constructor.
|
||||
*/
|
||||
protected boolean isSupported(DataFlavor[] flavors) {
|
||||
Set set = new HashSet(Arrays.asList(flavors));
|
||||
Set<DataFlavor> set = new HashSet<DataFlavor>(Arrays.asList(flavors));
|
||||
set.retainAll(acceptedFlavors);
|
||||
return !set.isEmpty();
|
||||
}
|
||||
+1
-1
@@ -10,7 +10,7 @@
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*/
|
||||
package com.sun.jna.examples.dnd;
|
||||
package com.sun.jna.platform.dnd;
|
||||
|
||||
import java.awt.Point;
|
||||
import java.awt.dnd.DropTargetEvent;
|
||||
+3
-2
@@ -10,7 +10,7 @@
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*/
|
||||
package com.sun.jna.examples.dnd;
|
||||
package com.sun.jna.platform.dnd;
|
||||
|
||||
import java.awt.Component;
|
||||
import java.awt.Dimension;
|
||||
@@ -29,7 +29,7 @@ import javax.swing.JOptionPane;
|
||||
import javax.swing.SwingUtilities;
|
||||
import javax.swing.Timer;
|
||||
|
||||
import com.sun.jna.examples.WindowUtils;
|
||||
import com.sun.jna.platform.WindowUtils;
|
||||
|
||||
/** Provide a ghosted drag image for use during drags where
|
||||
* {@link DragSource#isDragImageSupported} returns false.<p>
|
||||
@@ -56,6 +56,7 @@ public class GhostedDragImage {
|
||||
// FIXME ensure gc is compatible (X11)
|
||||
GraphicsConfiguration gc = parent.getGraphicsConfiguration();
|
||||
dragImage = new Window(JOptionPane.getRootFrame(), gc) {
|
||||
private static final long serialVersionUID = 1L;
|
||||
public void paint(Graphics g) {
|
||||
icon.paintIcon(this, g, 0, 0);
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
<html>
|
||||
<head>
|
||||
<!--
|
||||
Copyright (c) 2010 Timothy Wall
|
||||
-->
|
||||
</head>
|
||||
<body bgcolor="white">
|
||||
|
||||
<!-- One sentence summary -->
|
||||
Provides integrated, extended drag and drop functionality,
|
||||
allowing ghosted drag images to be used on all platforms.
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,92 @@
|
||||
/*
|
||||
* Copyright (c) 2011 Denis Tulskiy
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* version 3 along with this work. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package com.sun.jna.platform.mac;
|
||||
|
||||
import java.nio.IntBuffer;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import com.sun.jna.Library;
|
||||
import com.sun.jna.Callback;
|
||||
import com.sun.jna.Native;
|
||||
import com.sun.jna.Pointer;
|
||||
import com.sun.jna.Structure;
|
||||
import com.sun.jna.ptr.PointerByReference;
|
||||
|
||||
/**
|
||||
* Author: Denis Tulskiy
|
||||
* Date: 7/25/11
|
||||
*/
|
||||
public interface Carbon extends Library {
|
||||
public static Carbon INSTANCE = (Carbon) Native.loadLibrary("Carbon", Carbon.class);
|
||||
|
||||
public static final int cmdKey = 0x0100;
|
||||
public static final int shiftKey = 0x0200;
|
||||
public static final int optionKey = 0x0800;
|
||||
public static final int controlKey = 0x1000;
|
||||
|
||||
/**
|
||||
* Obtains the event target reference for the standard toolbox dispatcher
|
||||
*/
|
||||
public Pointer GetEventDispatcherTarget();
|
||||
|
||||
/**
|
||||
* Installs an event handler on a specified event target.
|
||||
*/
|
||||
public int InstallEventHandler(Pointer inTarget, EventHandlerProcPtr inHandler, int inNumTypes, EventTypeSpec[] inList, Pointer inUserData, PointerByReference outRef);
|
||||
|
||||
/**
|
||||
* Registers a global hot key.
|
||||
*/
|
||||
public int RegisterEventHotKey(int inHotKeyCode, int inHotKeyModifiers, EventHotKeyID.ByValue inHotKeyID, Pointer inTarget, int inOptions, PointerByReference outRef);
|
||||
|
||||
/**
|
||||
* Obtains a parameter from the specified event.
|
||||
*/
|
||||
public int GetEventParameter(Pointer inEvent, int inName, int inDesiredType, Pointer outActualType, int inBufferSize, IntBuffer outActualSize, EventHotKeyID outData);
|
||||
|
||||
/**
|
||||
* Removes the specified event handler
|
||||
*/
|
||||
public int RemoveEventHandler(Pointer inHandlerRef);
|
||||
|
||||
/**
|
||||
* Unregisters a global hot key.
|
||||
*/
|
||||
public int UnregisterEventHotKey(Pointer inHotKey);
|
||||
|
||||
public class EventTypeSpec extends Structure {
|
||||
public int eventClass;
|
||||
public int eventKind;
|
||||
protected List getFieldOrder() {
|
||||
return Arrays.asList(new String[] { "eventClass", "eventKind" }); }
|
||||
}
|
||||
|
||||
public static class EventHotKeyID extends Structure {
|
||||
public int signature;
|
||||
public int id;
|
||||
|
||||
public static class ByValue extends EventHotKeyID implements Structure.ByValue { }
|
||||
protected List getFieldOrder() {
|
||||
return Arrays.asList(new String[] { "signature", "id" }); }
|
||||
}
|
||||
|
||||
public static interface EventHandlerProcPtr extends Callback {
|
||||
public int callback(Pointer inHandlerCallRef, Pointer inEvent, Pointer inUserData);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,86 @@
|
||||
/* Copyright (c) 2007-2013 Timothy Wall, All Rights Reserved
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*/
|
||||
package com.sun.jna.platform.mac;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import com.sun.jna.Library;
|
||||
import com.sun.jna.Native;
|
||||
import com.sun.jna.Pointer;
|
||||
import com.sun.jna.Structure;
|
||||
import com.sun.jna.ptr.PointerByReference;
|
||||
import com.sun.jna.ptr.ByteByReference;
|
||||
import com.sun.jna.platform.FileUtils;
|
||||
|
||||
public class MacFileUtils extends FileUtils {
|
||||
|
||||
public boolean hasTrash() { return true; }
|
||||
|
||||
public interface FileManager extends Library {
|
||||
|
||||
public FileManager INSTANCE = (FileManager)Native.loadLibrary("CoreServices", FileManager.class);
|
||||
|
||||
int kFSFileOperationDefaultOptions = 0;
|
||||
int kFSFileOperationsOverwrite = 0x01;
|
||||
int kFSFileOperationsSkipSourcePermissionErrors = 0x02;
|
||||
int kFSFileOperationsDoNotMoveAcrossVolumes = 0x04;
|
||||
int kFSFileOperationsSkipPreflight = 0x08;
|
||||
|
||||
int kFSPathDefaultOptions = 0x0;
|
||||
int kFSPathMakeRefDoNotFollowLeafSymlink = 0x01;
|
||||
|
||||
class FSRef extends Structure {
|
||||
public byte[] hidden = new byte[80];
|
||||
protected List getFieldOrder() { return Arrays.asList(new String[] { "hidden" }); }
|
||||
}
|
||||
|
||||
// Deprecated; use trashItemAtURL instead:
|
||||
// https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSFileManager_Class/Reference/Reference.html#//apple_ref/occ/instm/NSFileManager/trashItemAtURL:resultingItemURL:error:
|
||||
int FSRefMakePath(FSRef fsref, byte[] path, int maxPathSize);
|
||||
int FSPathMakeRef(String source, int options, ByteByReference isDirectory);
|
||||
int FSPathMakeRefWithOptions(String source, int options, FSRef fsref, ByteByReference isDirectory);
|
||||
int FSPathMoveObjectToTrashSync(String source, PointerByReference target, int options);
|
||||
int FSMoveObjectToTrashSync(FSRef source, FSRef target, int options);
|
||||
}
|
||||
|
||||
public void moveToTrash(File[] files) throws IOException {
|
||||
File home = new File(System.getProperty("user.home"));
|
||||
File trash = new File(home, ".Trash");
|
||||
if (!trash.exists()) {
|
||||
throw new IOException("The Trash was not found in its expected location (" + trash + ")");
|
||||
}
|
||||
List<String> failed = new ArrayList<String>();
|
||||
for (int i=0;i < files.length;i++) {
|
||||
File src = files[i];
|
||||
FileManager.FSRef fsref = new FileManager.FSRef();
|
||||
int status = FileManager.INSTANCE.FSPathMakeRefWithOptions(src.getAbsolutePath(),
|
||||
FileManager.kFSPathMakeRefDoNotFollowLeafSymlink,
|
||||
fsref, null);
|
||||
if (status != 0) {
|
||||
failed.add(src + " (FSRef: " + status + ")");
|
||||
continue;
|
||||
}
|
||||
status = FileManager.INSTANCE.FSMoveObjectToTrashSync(fsref, null, 0);
|
||||
if (status != 0) {
|
||||
failed.add(src + " (" + status + ")");
|
||||
}
|
||||
}
|
||||
if (failed.size() > 0) {
|
||||
throw new IOException("The following files could not be trashed: " + failed);
|
||||
}
|
||||
}
|
||||
}
|
||||
+2
-2
@@ -1,13 +1,13 @@
|
||||
<html>
|
||||
<head>
|
||||
<!--
|
||||
Copyright (c) 2007 Timothy Wall
|
||||
Copyright (c) 2010 Timothy Wall
|
||||
-->
|
||||
</head>
|
||||
<body bgcolor="white">
|
||||
|
||||
<!-- One sentence summary -->
|
||||
Provides examples of w32 library mappings.
|
||||
Provides common library mappings for the OS X platform.
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,13 @@
|
||||
<html>
|
||||
<head>
|
||||
<!--
|
||||
Copyright (c) 2010 Timothy Wall
|
||||
-->
|
||||
</head>
|
||||
<body bgcolor="white">
|
||||
|
||||
<!-- One sentence summary -->
|
||||
Provides cross-platform utilities based on platform-specific libraries.
|
||||
|
||||
</body>
|
||||
</html>
|
||||
+222
-15
@@ -10,21 +10,37 @@
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*/
|
||||
package com.sun.jna.examples.unix;
|
||||
package com.sun.jna.platform.unix;
|
||||
|
||||
import com.sun.jna.*;
|
||||
import com.sun.jna.ptr.*;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import com.sun.jna.Callback;
|
||||
import com.sun.jna.FromNativeContext;
|
||||
import com.sun.jna.Library;
|
||||
import com.sun.jna.Native;
|
||||
import com.sun.jna.NativeLong;
|
||||
import com.sun.jna.Pointer;
|
||||
import com.sun.jna.PointerType;
|
||||
import com.sun.jna.Structure;
|
||||
import com.sun.jna.Union;
|
||||
import com.sun.jna.ptr.ByReference;
|
||||
import com.sun.jna.ptr.IntByReference;
|
||||
import com.sun.jna.ptr.NativeLongByReference;
|
||||
import com.sun.jna.ptr.PointerByReference;
|
||||
|
||||
/** Definition (incomplete) of the X library. */
|
||||
public interface X11 extends Library {
|
||||
|
||||
class VisualID extends NativeLong {
|
||||
public VisualID() { }
|
||||
private static final long serialVersionUID = 1L;
|
||||
public VisualID() { }
|
||||
public VisualID(long value) { super(value); }
|
||||
}
|
||||
|
||||
class XID extends NativeLong {
|
||||
public static final XID None = null;
|
||||
private static final long serialVersionUID = 1L;
|
||||
public static final XID None = null;
|
||||
public XID() { this(0); }
|
||||
public XID(long id) { super(id); }
|
||||
protected boolean isNone(Object o) {
|
||||
@@ -42,6 +58,7 @@ public interface X11 extends Library {
|
||||
}
|
||||
}
|
||||
class Atom extends XID {
|
||||
private static final long serialVersionUID = 1L;
|
||||
public static final Atom None = null;
|
||||
public Atom() { }
|
||||
public Atom(long id) { super(id); }
|
||||
@@ -133,6 +150,7 @@ public interface X11 extends Library {
|
||||
}
|
||||
}
|
||||
class Colormap extends XID {
|
||||
private static final long serialVersionUID = 1L;
|
||||
public static final Colormap None = null;
|
||||
public Colormap() { }
|
||||
public Colormap(long id) { super(id); }
|
||||
@@ -143,6 +161,7 @@ public interface X11 extends Library {
|
||||
}
|
||||
}
|
||||
class Font extends XID {
|
||||
private static final long serialVersionUID = 1L;
|
||||
public static final Font None = null;
|
||||
public Font() { }
|
||||
public Font(long id) { super(id); }
|
||||
@@ -153,6 +172,7 @@ public interface X11 extends Library {
|
||||
}
|
||||
}
|
||||
class Cursor extends XID {
|
||||
private static final long serialVersionUID = 1L;
|
||||
public static final Cursor None = null;
|
||||
public Cursor() { }
|
||||
public Cursor(long id) { super(id); }
|
||||
@@ -163,6 +183,7 @@ public interface X11 extends Library {
|
||||
}
|
||||
}
|
||||
class KeySym extends XID {
|
||||
private static final long serialVersionUID = 1L;
|
||||
public static final KeySym None = null;
|
||||
public KeySym() { }
|
||||
public KeySym(long id) { super(id); }
|
||||
@@ -173,6 +194,7 @@ public interface X11 extends Library {
|
||||
}
|
||||
}
|
||||
class Drawable extends XID {
|
||||
private static final long serialVersionUID = 1L;
|
||||
public static final Drawable None = null;
|
||||
public Drawable() { }
|
||||
public Drawable(long id) { super(id); }
|
||||
@@ -183,7 +205,8 @@ public interface X11 extends Library {
|
||||
}
|
||||
}
|
||||
class Window extends Drawable {
|
||||
public static final Window None = null;
|
||||
private static final long serialVersionUID = 1L;
|
||||
public static final Window None = null;
|
||||
public Window() { }
|
||||
public Window(long id) { super(id); }
|
||||
public Object fromNative(Object nativeValue, FromNativeContext context) {
|
||||
@@ -201,7 +224,8 @@ public interface X11 extends Library {
|
||||
}
|
||||
}
|
||||
class Pixmap extends Drawable {
|
||||
public static final Pixmap None = null;
|
||||
private static final long serialVersionUID = 1L;
|
||||
public static final Pixmap None = null;
|
||||
public Pixmap() { }
|
||||
public Pixmap(long id) { super(id); }
|
||||
public Object fromNative(Object nativeValue, FromNativeContext context) {
|
||||
@@ -256,8 +280,12 @@ public interface X11 extends Library {
|
||||
public short green, greenMask;
|
||||
public short blue, blueMask;
|
||||
public short alpha, alphaMask;
|
||||
protected List getFieldOrder() {
|
||||
return Arrays.asList(new String[] { "red", "redMask", "green", "greenMask", "blue", "blueMask", "alpha", "alphaMask" });
|
||||
}
|
||||
}
|
||||
class PictFormat extends NativeLong {
|
||||
private static final long serialVersionUID = 1L;
|
||||
public PictFormat(long value) { super(value); }
|
||||
public PictFormat() { }
|
||||
}
|
||||
@@ -267,6 +295,9 @@ public interface X11 extends Library {
|
||||
public int depth;
|
||||
public XRenderDirectFormat direct;
|
||||
public Colormap colormap;
|
||||
protected List getFieldOrder() {
|
||||
return Arrays.asList(new String[] { "id", "type", "depth", "direct", "colormap" });
|
||||
}
|
||||
}
|
||||
int PictTypeIndexed = 0x0;
|
||||
int PictTypeDirect = 0x1;
|
||||
@@ -315,12 +346,18 @@ public interface X11 extends Library {
|
||||
class XInputClassInfoByReference extends Structure implements Structure.ByReference {
|
||||
public byte input_class;
|
||||
public byte event_type_base;
|
||||
protected List getFieldOrder() {
|
||||
return Arrays.asList(new String[] { "input_class", "event_type_base" });
|
||||
}
|
||||
}
|
||||
|
||||
class XDeviceByReference extends Structure implements Structure.ByReference {
|
||||
public XID device_id;
|
||||
public int num_classes;
|
||||
public XInputClassInfoByReference classes;
|
||||
protected List getFieldOrder() {
|
||||
return Arrays.asList(new String[] { "device_id", "num_classes", "classes" });
|
||||
}
|
||||
}
|
||||
|
||||
X11 INSTANCE = (X11)Native.loadLibrary("X11", X11.class);
|
||||
@@ -348,6 +385,9 @@ public interface X11 extends Library {
|
||||
public int icon_x, icon_y;
|
||||
public Pixmap icon_mask;
|
||||
public XID window_group;
|
||||
protected List getFieldOrder() {
|
||||
return Arrays.asList(new String[] { "flags", "input", "initial_state", "icon_pixmap", "icon_window", "icon_x", "icon_y", "icon_mask", "window_group" });
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -363,6 +403,9 @@ public interface X11 extends Library {
|
||||
public Atom encoding;
|
||||
public int format;
|
||||
public NativeLong nitems;
|
||||
protected List getFieldOrder() {
|
||||
return Arrays.asList(new String[] { "value", "encoding", "format", "nitems" });
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -391,10 +434,14 @@ public interface X11 extends Library {
|
||||
public static class Aspect extends Structure {
|
||||
public int x; // numerator
|
||||
public int y; // denominator
|
||||
protected List getFieldOrder() {
|
||||
return Arrays.asList(new String[] { "x", "y" }); }
|
||||
}
|
||||
public Aspect min_aspect, max_aspect;
|
||||
public int base_width, base_height;
|
||||
public int win_gravity;
|
||||
protected List getFieldOrder() {
|
||||
return Arrays.asList(new String[] { "flags", "x", "y", "width", "height", "min_width", "min_height", "max_width", "max_height", "width_inc", "height_inc", "min_aspect", "max_aspect", "base_width", "base_height", "win_gravity" }); }
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -448,6 +495,9 @@ public interface X11 extends Library {
|
||||
public NativeLong do_not_propagate_mask;
|
||||
public boolean override_redirect;
|
||||
public Screen screen;
|
||||
protected List getFieldOrder() {
|
||||
return Arrays.asList(new String[] { "x", "y", "width", "height", "border_width", "depth", "visual", "root", "c_class", "bit_gravity", "win_gravity", "backing_store", "backing_planes", "backing_pixel", "save_under", "colormap", "map_installed", "map_state", "all_event_masks", "your_event_mask", "do_not_propagate_mask", "override_redirect", "screen" });
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -485,6 +535,9 @@ public interface X11 extends Library {
|
||||
public boolean override_redirect;
|
||||
public Colormap colormap;
|
||||
public Cursor cursor;
|
||||
protected List getFieldOrder() {
|
||||
return Arrays.asList(new String[] { "background_pixmap", "background_pixel", "border_pixmap", "border_pixel", "bit_gravity", "win_gravity", "backing_store", "backing_planes", "backing_pixel", "save_under", "event_mask", "do_not_propagate_mask", "override_redirect", "colormap", "cursor" });
|
||||
}
|
||||
}
|
||||
|
||||
int XK_0 = 0x30;
|
||||
@@ -527,10 +580,16 @@ public interface X11 extends Library {
|
||||
public NativeLong blue_mask;
|
||||
public int colormap_size;
|
||||
public int bits_per_rgb;
|
||||
protected List getFieldOrder() {
|
||||
return Arrays.asList(new String[] { "visual", "visualid", "screen", "depth", "c_class", "red_mask", "green_mask", "blue_mask", "colormap_size", "bits_per_rgb" });
|
||||
}
|
||||
}
|
||||
class XPoint extends Structure {
|
||||
public short x, y;
|
||||
public XPoint() { }
|
||||
protected List getFieldOrder() {
|
||||
return Arrays.asList(new String[] { "x", "y" });
|
||||
}
|
||||
public XPoint() { this((short)0, (short)0); }
|
||||
public XPoint(short x, short y) {
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
@@ -539,7 +598,10 @@ public interface X11 extends Library {
|
||||
class XRectangle extends Structure {
|
||||
public short x, y;
|
||||
public short width, height;
|
||||
public XRectangle() { }
|
||||
protected List getFieldOrder() {
|
||||
return Arrays.asList(new String[] { "x", "y", "width", "height" });
|
||||
}
|
||||
public XRectangle() { this((short)0, (short)0, (short)0, (short)0); }
|
||||
public XRectangle(short x, short y, short width, short height) {
|
||||
this.x = x; this.y = y;
|
||||
this.width = width; this.height = height;
|
||||
@@ -683,6 +745,9 @@ public interface X11 extends Library {
|
||||
public Pixmap clip_mask; /* bitmap clipping; other calls for rects */
|
||||
public int dash_offset; /* patterned/dashed line information */
|
||||
public byte dashes;
|
||||
protected List getFieldOrder() {
|
||||
return Arrays.asList(new String[] { "function", "plane_mask", "foreground", "background", "line_width", "line_style", "cap_style", "join_style", "fill_style", "fill_rule", "arc_mode", "tile", "stipple", "ts_x_origin", "ts_y_origin", "font", "subwindow_mode", "graphics_exposures", "clip_x_origin", "clip_y_origin", "clip_mask", "dash_offset", "dashes" });
|
||||
}
|
||||
}
|
||||
GC XCreateGC(Display display, Drawable drawable, NativeLong mask, XGCValues values);
|
||||
int XSetFillRule(Display display, GC gc, int fill_rule);
|
||||
@@ -921,8 +986,8 @@ public interface X11 extends Library {
|
||||
int SyncBoth = 7;
|
||||
|
||||
/* Used in SetInputFocus, GetInputFocus */
|
||||
int RevertToNone = (int)None;
|
||||
int RevertToPointerRoot = (int)PointerRoot;
|
||||
int RevertToNone = None;
|
||||
int RevertToPointerRoot = PointerRoot;
|
||||
int RevertToParent = 2;
|
||||
|
||||
/*****************************************************************
|
||||
@@ -1308,6 +1373,9 @@ public interface X11 extends Library {
|
||||
public int send_event; // true if this came from a SendEvent request
|
||||
public Display display; // Display the event was read from
|
||||
public Window window; // window on which event was requested in event mask
|
||||
protected List getFieldOrder() {
|
||||
return Arrays.asList(new String[] { "type", "serial", "send_event", "display", "window" });
|
||||
}
|
||||
}
|
||||
|
||||
class XKeyEvent extends Structure {
|
||||
@@ -1324,6 +1392,9 @@ public interface X11 extends Library {
|
||||
public int state; // key or button mask
|
||||
public int keycode; // detail
|
||||
public int same_screen; // same screen flag
|
||||
protected List getFieldOrder() {
|
||||
return Arrays.asList(new String[] { "type", "serial", "send_event", "display", "window", "root", "subwindow", "time", "x", "y", "x_root", "y_root", "state", "keycode", "same_screen" });
|
||||
}
|
||||
}
|
||||
|
||||
class XButtonEvent extends Structure {
|
||||
@@ -1340,6 +1411,9 @@ public interface X11 extends Library {
|
||||
public int state; // key or button mask
|
||||
public int button; // detail
|
||||
public int same_screen; // same screen flag
|
||||
protected List getFieldOrder() {
|
||||
return Arrays.asList(new String[] { "type", "serial", "send_event", "display", "window", "root", "subwindow", "time", "x", "y", "x_root", "y_root", "state", "button", "same_screen" });
|
||||
}
|
||||
}
|
||||
|
||||
class XButtonPressedEvent extends XButtonEvent {
|
||||
@@ -1357,6 +1431,9 @@ public interface X11 extends Library {
|
||||
public Atom message_type;
|
||||
public int format;
|
||||
public Data data;
|
||||
protected List getFieldOrder() {
|
||||
return Arrays.asList(new String[] { "type", "serial", "send_event", "display", "window", "message_type", "format", "data" });
|
||||
}
|
||||
|
||||
public static class Data extends Union {
|
||||
public byte b[] = new byte[20];
|
||||
@@ -1379,6 +1456,9 @@ public interface X11 extends Library {
|
||||
public int state; // key or button mask
|
||||
public byte is_hint; // detail
|
||||
public int same_screen; // same screen flag
|
||||
protected List getFieldOrder() {
|
||||
return Arrays.asList(new String[] { "type", "serial", "send_event", "display", "window", "root", "subwindow", "time", "x", "y", "x_root", "y_root", "state", "is_hint", "same_screen" });
|
||||
}
|
||||
}
|
||||
|
||||
class XPointerMovedEvent extends XMotionEvent {
|
||||
@@ -1402,8 +1482,11 @@ public interface X11 extends Library {
|
||||
* NotifyNonlinear,NotifyNonlinearVirtual
|
||||
*/
|
||||
public int same_screen; // same screen flag
|
||||
public int focus; // intean focus
|
||||
public int focus; // boolean focus
|
||||
public int state; // key or button mask
|
||||
protected List getFieldOrder() {
|
||||
return Arrays.asList(new String[] { "type", "serial", "send_event", "display", "window", "root", "subwindow", "time", "x", "y", "x_root", "y_root", "mode", "detail", "same_screen", "focus", "state" });
|
||||
}
|
||||
}
|
||||
|
||||
class XEnterWindowEvent extends XCrossingEvent {
|
||||
@@ -1425,6 +1508,9 @@ public interface X11 extends Library {
|
||||
* NotifyNonlinear,NotifyNonlinearVirtual, NotifyPointer,
|
||||
* NotifyPointerRoot, NotifyDetailNone
|
||||
*/
|
||||
protected List getFieldOrder() {
|
||||
return Arrays.asList(new String[] { "type", "serial", "send_event", "display", "window", "mode", "detail" });
|
||||
}
|
||||
}
|
||||
|
||||
class XFocusInEvent extends XFocusChangeEvent {
|
||||
@@ -1442,6 +1528,9 @@ public interface X11 extends Library {
|
||||
public int x, y;
|
||||
public int width, height;
|
||||
public int count; // if non-zero, at least this many more
|
||||
protected List getFieldOrder() {
|
||||
return Arrays.asList(new String[] { "type", "serial", "send_event", "display", "window", "x", "y", "width", "height", "count" });
|
||||
}
|
||||
}
|
||||
|
||||
class XGraphicsExposeEvent extends Structure {
|
||||
@@ -1455,6 +1544,9 @@ public interface X11 extends Library {
|
||||
public int count; // if non-zero, at least this many more
|
||||
public int major_code; // core is CopyArea or CopyPlane
|
||||
public int minor_code; // not defined in the core
|
||||
protected List getFieldOrder() {
|
||||
return Arrays.asList(new String[] { "type", "serial", "send_event", "display", "drawable", "x", "y", "width", "height", "count", "major_code", "minor_code" });
|
||||
}
|
||||
}
|
||||
|
||||
class XNoExposeEvent extends Structure {
|
||||
@@ -1465,6 +1557,9 @@ public interface X11 extends Library {
|
||||
public Drawable drawable;
|
||||
public int major_code; // core is CopyArea or CopyPlane
|
||||
public int minor_code; // not defined in the core
|
||||
protected List getFieldOrder() {
|
||||
return Arrays.asList(new String[] { "type", "serial", "send_event", "display", "drawable", "major_code", "minor_code" });
|
||||
}
|
||||
}
|
||||
|
||||
class XVisibilityEvent extends Structure {
|
||||
@@ -1474,6 +1569,9 @@ public interface X11 extends Library {
|
||||
public Display display; // Display the event was read from
|
||||
public Window window;
|
||||
public int state; // Visibility state
|
||||
protected List getFieldOrder() {
|
||||
return Arrays.asList(new String[] { "type", "serial", "send_event", "display", "window", "state" });
|
||||
}
|
||||
}
|
||||
|
||||
class XCreateWindowEvent extends Structure {
|
||||
@@ -1487,6 +1585,9 @@ public interface X11 extends Library {
|
||||
public int width, height; // size of window
|
||||
public int border_width; // border width
|
||||
public int override_redirect; // creation should be overridden
|
||||
protected List getFieldOrder() {
|
||||
return Arrays.asList(new String[] { "type", "serial", "send_event", "display", "parent", "window", "x", "y", "width", "height", "border_width", "override_redirect" });
|
||||
}
|
||||
}
|
||||
|
||||
class XDestroyWindowEvent extends Structure {
|
||||
@@ -1496,6 +1597,8 @@ public interface X11 extends Library {
|
||||
public Display display; // Display the event was read from
|
||||
public Window event;
|
||||
public Window window;
|
||||
protected List getFieldOrder() {
|
||||
return Arrays.asList(new String[] { "type", "serial", "send_event", "display", "event", "window" }); }
|
||||
}
|
||||
|
||||
class XUnmapEvent extends Structure {
|
||||
@@ -1506,6 +1609,9 @@ public interface X11 extends Library {
|
||||
public Window event;
|
||||
public Window window;
|
||||
public int from_configure;
|
||||
protected List getFieldOrder() {
|
||||
return Arrays.asList(new String[] { "type", "serial", "send_event", "display", "event", "window", "from_configure" });
|
||||
}
|
||||
}
|
||||
|
||||
class XMapEvent extends Structure {
|
||||
@@ -1515,7 +1621,10 @@ public interface X11 extends Library {
|
||||
public Display display; // Display the event was read from
|
||||
public Window event;
|
||||
public Window window;
|
||||
public int override_redirect; // intean, is override set...
|
||||
public int override_redirect; // boolean, is override set...
|
||||
protected List getFieldOrder() {
|
||||
return Arrays.asList(new String[] { "type", "serial", "send_event", "display", "event", "window", "override_redirect" });
|
||||
}
|
||||
}
|
||||
|
||||
class XMapRequestEvent extends Structure {
|
||||
@@ -1525,6 +1634,9 @@ public interface X11 extends Library {
|
||||
public Display display; // Display the event was read from
|
||||
public Window parent;
|
||||
public Window window;
|
||||
protected List getFieldOrder() {
|
||||
return Arrays.asList(new String[] { "type", "serial", "send_event", "display", "parent", "window" });
|
||||
}
|
||||
}
|
||||
|
||||
class XReparentEvent extends Structure {
|
||||
@@ -1537,6 +1649,9 @@ public interface X11 extends Library {
|
||||
public Window parent;
|
||||
public int x, y;
|
||||
public int override_redirect;
|
||||
protected List getFieldOrder() {
|
||||
return Arrays.asList(new String[] { "type", "serial", "send_event", "display", "event", "window", "parent", "x", "y", "override_redirect" });
|
||||
}
|
||||
}
|
||||
|
||||
class XConfigureEvent extends Structure {
|
||||
@@ -1551,6 +1666,9 @@ public interface X11 extends Library {
|
||||
public int border_width;
|
||||
public Window above;
|
||||
public int override_redirect;
|
||||
protected List getFieldOrder() {
|
||||
return Arrays.asList(new String[] { "type", "serial", "send_event", "display", "event", "window", "x", "y", "width", "height", "border_width", "above", "override_redirect" });
|
||||
}
|
||||
}
|
||||
|
||||
class XGravityEvent extends Structure {
|
||||
@@ -1561,6 +1679,9 @@ public interface X11 extends Library {
|
||||
public Window event;
|
||||
public Window window;
|
||||
public int x, y;
|
||||
protected List getFieldOrder() {
|
||||
return Arrays.asList(new String[] { "type", "serial", "send_event", "display", "event", "window", "x", "y" });
|
||||
}
|
||||
}
|
||||
|
||||
class XResizeRequestEvent extends Structure {
|
||||
@@ -1570,6 +1691,9 @@ public interface X11 extends Library {
|
||||
public Display display; // Display the event was read from
|
||||
public Window window;
|
||||
public int width, height;
|
||||
protected List getFieldOrder() {
|
||||
return Arrays.asList(new String[] { "type", "serial", "send_event", "display", "window", "width", "height" });
|
||||
}
|
||||
}
|
||||
|
||||
class XConfigureRequestEvent extends Structure {
|
||||
@@ -1585,6 +1709,9 @@ public interface X11 extends Library {
|
||||
public Window above;
|
||||
public int detail; // Above, Below, TopIf, BottomIf, Opposite
|
||||
public NativeLong value_mask;
|
||||
protected List getFieldOrder() {
|
||||
return Arrays.asList(new String[] { "type", "serial", "send_event", "display", "parent", "window", "x", "y", "width", "height", "border_width", "above", "detail", "value_mask" });
|
||||
}
|
||||
}
|
||||
|
||||
class XCirculateEvent extends Structure {
|
||||
@@ -1595,6 +1722,9 @@ public interface X11 extends Library {
|
||||
public Window event;
|
||||
public Window window;
|
||||
public int place; // PlaceOnTop, PlaceOnBottom
|
||||
protected List getFieldOrder() {
|
||||
return Arrays.asList(new String[] { "type", "serial", "send_event", "display", "event", "window", "place" });
|
||||
}
|
||||
}
|
||||
|
||||
class XCirculateRequestEvent extends Structure {
|
||||
@@ -1605,6 +1735,9 @@ public interface X11 extends Library {
|
||||
public Window parent;
|
||||
public Window window;
|
||||
public int place; // PlaceOnTop, PlaceOnBottom
|
||||
protected List getFieldOrder() {
|
||||
return Arrays.asList(new String[] { "type", "serial", "send_event", "display", "parent", "window", "place" });
|
||||
}
|
||||
}
|
||||
|
||||
class XPropertyEvent extends Structure {
|
||||
@@ -1616,6 +1749,9 @@ public interface X11 extends Library {
|
||||
public Atom atom;
|
||||
public NativeLong time;
|
||||
public int state; // NewValue, Deleted
|
||||
protected List getFieldOrder() {
|
||||
return Arrays.asList(new String[] { "type", "serial", "send_event", "display", "window", "atom", "time", "state" });
|
||||
}
|
||||
}
|
||||
|
||||
class XSelectionClearEvent extends Structure {
|
||||
@@ -1626,6 +1762,9 @@ public interface X11 extends Library {
|
||||
public Window window;
|
||||
public Atom selection;
|
||||
public NativeLong time;
|
||||
protected List getFieldOrder() {
|
||||
return Arrays.asList(new String[] { "type", "serial", "send_event", "display", "window", "selection", "time" });
|
||||
}
|
||||
}
|
||||
|
||||
class XSelectionRequestEvent extends Structure {
|
||||
@@ -1637,8 +1776,11 @@ public interface X11 extends Library {
|
||||
public Window requestor;
|
||||
public Atom selection;
|
||||
public Atom target;
|
||||
Atom property;
|
||||
public Atom property;
|
||||
public NativeLong time;
|
||||
protected List getFieldOrder() {
|
||||
return Arrays.asList(new String[] { "type", "serial", "send_event", "display", "owner", "requestor", "selection", "target", "property", "time" });
|
||||
}
|
||||
}
|
||||
|
||||
class XSelectionEvent extends Structure {
|
||||
@@ -1651,6 +1793,9 @@ public interface X11 extends Library {
|
||||
public Atom target;
|
||||
public Atom property; // ATOM or None
|
||||
public NativeLong time;
|
||||
protected List getFieldOrder() {
|
||||
return Arrays.asList(new String[] { "type", "serial", "send_event", "display", "requestor", "selection", "target", "property", "time" });
|
||||
}
|
||||
}
|
||||
|
||||
class XColormapEvent extends Structure {
|
||||
@@ -1662,6 +1807,9 @@ public interface X11 extends Library {
|
||||
public Colormap colormap; // COLORMAP or None
|
||||
public int c_new; // C++
|
||||
public int state; // ColormapInstalled, ColormapUninstalled
|
||||
protected List getFieldOrder() {
|
||||
return Arrays.asList(new String[] { "type", "serial", "send_event", "display", "window", "colormap", "c_new", "state" });
|
||||
}
|
||||
}
|
||||
|
||||
class XMappingEvent extends Structure {
|
||||
@@ -1673,16 +1821,22 @@ public interface X11 extends Library {
|
||||
public int request; // one of MappingModifier, MappingKeyboard, MappingPointer
|
||||
public int first_keycode; // first keycode
|
||||
public int count; // defines range of change w. first_keycode*/
|
||||
protected List getFieldOrder() {
|
||||
return Arrays.asList(new String[] { "type", "serial", "send_event", "display", "window", "request", "first_keycode", "count" });
|
||||
}
|
||||
}
|
||||
|
||||
class XErrorEvent extends Structure {
|
||||
public int type;
|
||||
public Display display; // Display the event was read from
|
||||
public XID resourceid; // resource id
|
||||
public NativeLong serial; // serial number of failed request
|
||||
public byte error_code; // error code of failed request
|
||||
public byte request_code; // Major op-code of failed request
|
||||
public byte minor_code; // Minor op-code of failed request
|
||||
public XID resourceid; // resource id
|
||||
protected List getFieldOrder() {
|
||||
return Arrays.asList(new String[] { "type", "display", "serial", "error_code", "request_code", "minor_code", "resourceid" });
|
||||
}
|
||||
}
|
||||
|
||||
// generated on EnterWindow and FocusIn when KeyMapState selected
|
||||
@@ -1693,6 +1847,9 @@ public interface X11 extends Library {
|
||||
public Display display; // Display the event was read from
|
||||
public Window window;
|
||||
public byte key_vector[] = new byte[32];
|
||||
protected List getFieldOrder() {
|
||||
return Arrays.asList(new String[] { "type", "serial", "send_event", "display", "window", "key_vector" });
|
||||
}
|
||||
}
|
||||
|
||||
int XSelectInput(Display display, Window window, NativeLong eventMask);
|
||||
@@ -1747,6 +1904,18 @@ public interface X11 extends Library {
|
||||
int width, int height);
|
||||
int XDestroyImage(XImage image);
|
||||
|
||||
/**
|
||||
* Installs an error handler
|
||||
*
|
||||
* @param handler Specifies the program's supplied error handler
|
||||
* @return The previous error handler
|
||||
*/
|
||||
XErrorHandler XSetErrorHandler(XErrorHandler handler);
|
||||
|
||||
public interface XErrorHandler extends Callback {
|
||||
public int apply(Display display, XErrorEvent errorEvent);
|
||||
}
|
||||
|
||||
|
||||
/*****************************************************************
|
||||
* KeySyms, Keycodes, Keymaps
|
||||
@@ -1757,6 +1926,33 @@ public interface X11 extends Library {
|
||||
byte XKeysymToKeycode(Display display, KeySym keysym);
|
||||
KeySym XKeycodeToKeysym(Display display, byte keycode, int index);
|
||||
|
||||
/**
|
||||
* Establishes a passive grab on the keyboard
|
||||
*
|
||||
* @param display Specifies the connection to the X server.
|
||||
* @param keyCode Specifies the KeyCode or {@link #AnyKey}.
|
||||
* @param modifiers Specifies the set of keymasks or {@link #AnyModifier}.
|
||||
* The mask is the bitwise inclusive OR of the valid keymask bits.
|
||||
* @param grab_window Specifies the grab window.
|
||||
* @param ownerEvents Specifies a Boolean value that indicates whether the keyboard events are to be reported as usual.
|
||||
* @param pointerMode Specifies further processing of pointer events. You can pass {@link #GrabModeSync} or {@link #GrabModeAsync}.
|
||||
* @param keyBoardMode Specifies further processing of keyboard events. You can pass {@link #GrabModeSync} or {@link #GrabModeAsync}.
|
||||
* @return nothing
|
||||
*/
|
||||
int XGrabKey(Display display, int keyCode, int modifiers, Window grab_window, int ownerEvents, int pointerMode, int keyBoardMode);
|
||||
|
||||
/**
|
||||
* The XUngrabKey() function releases the key combination on the specified window if it was grabbed by this client.
|
||||
*
|
||||
* @param display Specifies the connection to the X server.
|
||||
* @param keyCode Specifies the KeyCode or {@link #AnyKey}.
|
||||
* @param modifiers Specifies the set of keymasks or {@link #AnyModifier}.
|
||||
* The mask is the bitwise inclusive OR of the valid keymask bits
|
||||
* @param grab_window Specifies the grab window.
|
||||
* @return nothing
|
||||
*/
|
||||
int XUngrabKey(Display display, int keyCode, int modifiers, Window grab_window);
|
||||
|
||||
//int XChangeKeyboardMapping(Display display, int first_keycode, int keysyms_per_keycode, KeySym *keysyms, int num_codes);
|
||||
/** Defines the symbols for the specified number of KeyCodes starting with first_keycode. The symbols for KeyCodes outside this range remain unchanged. The number of elements in keysyms must be: num_codes * keysyms_per_keycode. The specified first_keycode must be greater than or equal to min_keycode returned by XDisplayKeycodes, or a BadValue error results. In addition, the following expression must be less than or equal to max_keycode as returned by XDisplayKeycodes, or a BadValue error results: first_keycode + num_codes - 1. */
|
||||
int XChangeKeyboardMapping(Display display, int first_keycode, int keysyms_per_keycode, KeySym[] keysyms, int num_codes);
|
||||
@@ -1798,6 +1994,9 @@ public interface X11 extends Library {
|
||||
class XModifierKeymapRef extends Structure implements Structure.ByReference{
|
||||
public int max_keypermod; /* The server's max # of keys per modifier */
|
||||
public Pointer modifiermap; /* An 8 by max_keypermod array of modifiers */
|
||||
protected List getFieldOrder() {
|
||||
return Arrays.asList(new String[] { "max_keypermod", "modifiermap" });
|
||||
}
|
||||
}
|
||||
|
||||
class XKeyboardControlRef extends Structure implements Structure.ByReference {
|
||||
@@ -1818,6 +2017,10 @@ public interface X11 extends Library {
|
||||
/** AutoRepeatModeOff, AutoRepeatModeOn, AutoRepeatModeDefault. */
|
||||
public int auto_repeat_mode;
|
||||
|
||||
protected List getFieldOrder() {
|
||||
return Arrays.asList(new String[] { "key_click_percent", "bell_percent", "bell_pitch", "bell_duration", "led", "led_mode", "key", "auto_repeat_mode" });
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
return "XKeyboardControlByReference{" +
|
||||
"key_click_percent=" + key_click_percent +
|
||||
@@ -1848,6 +2051,10 @@ public interface X11 extends Library {
|
||||
/** Bit vector. Each bit set to 1 indicates that auto-repeat is enabled for the corresponding key. The vector is represented as 32 bytes. Byte N (from 0) contains the bits for keys 8N to 8N + 7 with the least significant bit in the byte representing key 8N. */
|
||||
public byte auto_repeats[] = new byte[32];
|
||||
|
||||
protected List getFieldOrder() {
|
||||
return Arrays.asList(new String[] { "key_click_percent", "bell_percent", "bell_pitch", "bell_duration", "led_mask", "global_auto_repeat", "auto_repeats" });
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
return "XKeyboardStateByReference{" +
|
||||
"key_click_percent=" + key_click_percent +
|
||||
@@ -0,0 +1,13 @@
|
||||
<html>
|
||||
<head>
|
||||
<!--
|
||||
Copyright (c) 2010 Timothy Wall
|
||||
-->
|
||||
</head>
|
||||
<body bgcolor="white">
|
||||
|
||||
<!-- One sentence summary -->
|
||||
Provides common library mappings for Unix and X11-based platforms.
|
||||
|
||||
</body>
|
||||
</html>
|
||||
Diferenças do arquivo suprimidas por serem muito extensas
Carregar Diff
Diferenças do arquivo suprimidas por serem muito extensas
Carregar Diff
@@ -0,0 +1,127 @@
|
||||
/* Copyright (c) 2010 Daniel Doubrovkine, All Rights Reserved
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*/
|
||||
package com.sun.jna.platform.win32;
|
||||
|
||||
import com.sun.jna.IntegerType;
|
||||
import com.sun.jna.Pointer;
|
||||
import com.sun.jna.ptr.ByReference;
|
||||
import com.sun.jna.win32.StdCallLibrary;
|
||||
|
||||
/**
|
||||
* Based on basetsd.h (various types)
|
||||
* @author dblock[at]dblock[dot]org
|
||||
*/
|
||||
@SuppressWarnings("serial")
|
||||
public interface BaseTSD extends StdCallLibrary {
|
||||
/**
|
||||
* Signed long type for pointer precision.
|
||||
* Use when casting a pointer to a long to perform pointer arithmetic.
|
||||
*/
|
||||
public static class LONG_PTR extends IntegerType {
|
||||
public LONG_PTR() {
|
||||
this(0);
|
||||
}
|
||||
|
||||
public LONG_PTR(long value) {
|
||||
super(Pointer.SIZE, value);
|
||||
}
|
||||
|
||||
public Pointer toPointer() {
|
||||
return Pointer.createConstant(longValue());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Signed SIZE_T.
|
||||
*/
|
||||
public static class SSIZE_T extends LONG_PTR {
|
||||
public SSIZE_T() {
|
||||
this(0);
|
||||
}
|
||||
|
||||
public SSIZE_T(long value) {
|
||||
super(value);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Unsigned LONG_PTR.
|
||||
*/
|
||||
public static class ULONG_PTR extends IntegerType {
|
||||
public ULONG_PTR() {
|
||||
this(0);
|
||||
}
|
||||
|
||||
public ULONG_PTR(long value) {
|
||||
super(Pointer.SIZE, value, true);
|
||||
}
|
||||
|
||||
public Pointer toPointer() {
|
||||
return Pointer.createConstant(longValue());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* PULONG_PTR
|
||||
*/
|
||||
public static class ULONG_PTRByReference extends ByReference {
|
||||
public ULONG_PTRByReference() {
|
||||
this(new ULONG_PTR(0));
|
||||
}
|
||||
public ULONG_PTRByReference(ULONG_PTR value) {
|
||||
super(Pointer.SIZE);
|
||||
setValue(value);
|
||||
}
|
||||
public void setValue(ULONG_PTR value) {
|
||||
if (Pointer.SIZE == 4) {
|
||||
getPointer().setInt(0, value.intValue());
|
||||
}
|
||||
else {
|
||||
getPointer().setLong(0, value.longValue());
|
||||
}
|
||||
}
|
||||
public ULONG_PTR getValue() {
|
||||
return new ULONG_PTR(Pointer.SIZE == 4
|
||||
? getPointer().getInt(0)
|
||||
: getPointer().getLong(0));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Unsigned DWORD_PTR.
|
||||
*/
|
||||
public static class DWORD_PTR extends IntegerType {
|
||||
public DWORD_PTR() {
|
||||
this(0);
|
||||
}
|
||||
|
||||
public DWORD_PTR(long value) {
|
||||
super(Pointer.SIZE, value);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* The maximum number of bytes to which a pointer can point.
|
||||
* Use for a count that must span the full range of a pointer.
|
||||
*/
|
||||
public static class SIZE_T extends ULONG_PTR {
|
||||
public SIZE_T() {
|
||||
this(0);
|
||||
}
|
||||
|
||||
public SIZE_T(long value) {
|
||||
super(value);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,104 @@
|
||||
/* Copyright (c) 2012 Tobias Wolf, All Rights Reserved
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*/
|
||||
package com.sun.jna.platform.win32.COM;
|
||||
|
||||
import com.sun.jna.platform.win32.OaIdl.EXCEPINFO;
|
||||
import com.sun.jna.ptr.IntByReference;
|
||||
|
||||
/**
|
||||
* Exception class for all COM related classes.
|
||||
*
|
||||
* @author Tobias Wolf, wolf.tobias@gmx.net
|
||||
*/
|
||||
public class COMException extends RuntimeException {
|
||||
|
||||
/** The p excep info. */
|
||||
private EXCEPINFO pExcepInfo;
|
||||
|
||||
/** The pu arg err. */
|
||||
private IntByReference puArgErr;
|
||||
|
||||
/**
|
||||
* Instantiates a new automation exception.
|
||||
*/
|
||||
public COMException() {
|
||||
super();
|
||||
}
|
||||
|
||||
/**
|
||||
* Instantiates a new automation exception.
|
||||
*
|
||||
* @param message
|
||||
* the message
|
||||
* @param cause
|
||||
* the cause
|
||||
*/
|
||||
public COMException(String message, Throwable cause) {
|
||||
super(message, cause);
|
||||
}
|
||||
|
||||
/**
|
||||
* Instantiates a new automation exception.
|
||||
*
|
||||
* @param message
|
||||
* the message
|
||||
*/
|
||||
public COMException(String message) {
|
||||
super(message);
|
||||
}
|
||||
|
||||
/**
|
||||
* Instantiates a new automation exception.
|
||||
*
|
||||
* @param message
|
||||
* the message
|
||||
* @param pExcepInfo
|
||||
* the excep info
|
||||
* @param puArgErr
|
||||
* the pu arg err
|
||||
*/
|
||||
public COMException(String message, EXCEPINFO pExcepInfo,
|
||||
IntByReference puArgErr) {
|
||||
super(message);
|
||||
this.pExcepInfo = pExcepInfo;
|
||||
this.puArgErr = puArgErr;
|
||||
}
|
||||
|
||||
/**
|
||||
* Instantiates a new automation exception.
|
||||
*
|
||||
* @param cause
|
||||
* the cause
|
||||
*/
|
||||
public COMException(Throwable cause) {
|
||||
super(cause);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the excep info.
|
||||
*
|
||||
* @return the excep info
|
||||
*/
|
||||
public EXCEPINFO getExcepInfo() {
|
||||
return pExcepInfo;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the arg err.
|
||||
*
|
||||
* @return the arg err
|
||||
*/
|
||||
public IntByReference getArgErr() {
|
||||
return puArgErr;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,202 @@
|
||||
/* Copyright (c) 2012 Tobias Wolf, All Rights Reserved
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*/
|
||||
package com.sun.jna.platform.win32.COM;
|
||||
|
||||
import com.sun.jna.Native;
|
||||
import com.sun.jna.WString;
|
||||
import com.sun.jna.platform.win32.Guid;
|
||||
import com.sun.jna.platform.win32.Guid.CLSID;
|
||||
import com.sun.jna.platform.win32.Kernel32;
|
||||
import com.sun.jna.platform.win32.OaIdl;
|
||||
import com.sun.jna.platform.win32.OaIdl.DISPID;
|
||||
import com.sun.jna.platform.win32.OaIdl.DISPIDbyReference;
|
||||
import com.sun.jna.platform.win32.OaIdl.EXCEPINFO;
|
||||
import com.sun.jna.platform.win32.Ole32;
|
||||
import com.sun.jna.platform.win32.OleAuto;
|
||||
import com.sun.jna.platform.win32.OleAuto.DISPPARAMS;
|
||||
import com.sun.jna.platform.win32.Variant.VARIANT;
|
||||
import com.sun.jna.platform.win32.Variant.VariantArg;
|
||||
import com.sun.jna.platform.win32.WTypes;
|
||||
import com.sun.jna.platform.win32.WinDef.LCID;
|
||||
import com.sun.jna.platform.win32.WinDef.UINT;
|
||||
import com.sun.jna.platform.win32.WinNT.HRESULT;
|
||||
import com.sun.jna.ptr.IntByReference;
|
||||
import com.sun.jna.ptr.PointerByReference;
|
||||
|
||||
/**
|
||||
* Helper class to provide basic COM support.
|
||||
*
|
||||
* @author Tobias Wolf, wolf.tobias@gmx.net
|
||||
*/
|
||||
public class COMObject {
|
||||
|
||||
public final static LCID LOCALE_USER_DEFAULT = Kernel32.INSTANCE
|
||||
.GetUserDefaultLCID();
|
||||
public final static LCID LOCALE_SYSTEM_DEFAULT = Kernel32.INSTANCE
|
||||
.GetSystemDefaultLCID();
|
||||
|
||||
protected IUnknown iUnknown;
|
||||
|
||||
protected IDispatch iDispatch;
|
||||
|
||||
private PointerByReference pDispatch = new PointerByReference();
|
||||
|
||||
private PointerByReference pUnknown = new PointerByReference();
|
||||
|
||||
public COMObject(IDispatch iDispatch) {
|
||||
this.iDispatch = iDispatch;
|
||||
}
|
||||
|
||||
/**
|
||||
* Instantiates a new cOM object.
|
||||
*
|
||||
* @param progId
|
||||
* the prog id
|
||||
* @param useActiveInstance
|
||||
* the use active instance
|
||||
* @throws COMException
|
||||
* the automation exception
|
||||
*/
|
||||
public COMObject(String progId, boolean useActiveInstance)
|
||||
throws COMException {
|
||||
// enable JNA protected mode
|
||||
Native.setProtected(true);
|
||||
|
||||
// Initialize COM for this thread...
|
||||
HRESULT hr = Ole32.INSTANCE.CoInitialize(null);
|
||||
|
||||
if (COMUtils.FAILED(hr)) {
|
||||
this.release();
|
||||
throw new COMException("CoInitialize() failed!");
|
||||
}
|
||||
|
||||
// Get CLSID for Word.Application...
|
||||
CLSID.ByReference clsid = new CLSID.ByReference();
|
||||
hr = Ole32.INSTANCE.CLSIDFromProgID(progId, clsid);
|
||||
|
||||
if (COMUtils.FAILED(hr)) {
|
||||
Ole32.INSTANCE.CoUninitialize();
|
||||
throw new COMException("CLSIDFromProgID() failed!");
|
||||
}
|
||||
|
||||
if (useActiveInstance) {
|
||||
hr = OleAuto.INSTANCE.GetActiveObject(clsid, null, this.pUnknown);
|
||||
|
||||
if (COMUtils.SUCCEEDED(hr)) {
|
||||
this.iUnknown = new IUnknown(this.pUnknown.getValue());
|
||||
hr = iUnknown.QueryInterface(IDispatch.IID_IDispatch,
|
||||
this.pDispatch);
|
||||
} else {
|
||||
hr = Ole32.INSTANCE.CoCreateInstance(clsid, null,
|
||||
WTypes.CLSCTX_SERVER, IDispatch.IID_IDispatch,
|
||||
this.pDispatch);
|
||||
}
|
||||
} else {
|
||||
hr = Ole32.INSTANCE.CoCreateInstance(clsid, null,
|
||||
WTypes.CLSCTX_SERVER, IDispatch.IID_IDispatch,
|
||||
this.pDispatch);
|
||||
}
|
||||
|
||||
if (COMUtils.FAILED(hr)) {
|
||||
throw new COMException("COM object with ProgID '" + progId
|
||||
+ "' and CLSID " + clsid.toGuidString() + " not registered properly!");
|
||||
}
|
||||
|
||||
this.iDispatch = new IDispatch(this.pDispatch.getValue());
|
||||
}
|
||||
|
||||
protected HRESULT oleMethod(int nType, VARIANT.ByReference pvResult,
|
||||
IDispatch pDisp, String name, VARIANT[] pArgs) throws COMException {
|
||||
|
||||
if (pDisp == null)
|
||||
throw new COMException("pDisp (IDispatch) parameter is null!");
|
||||
|
||||
WString[] ptName = new WString[] { new WString(name) };
|
||||
DISPPARAMS dp = new DISPPARAMS();
|
||||
DISPIDbyReference pdispID = new DISPIDbyReference();
|
||||
VariantArg.ByReference variantArg = new VariantArg.ByReference();
|
||||
variantArg.variantArg = pArgs;
|
||||
EXCEPINFO.ByReference pExcepInfo = new EXCEPINFO.ByReference();
|
||||
IntByReference puArgErr = new IntByReference();
|
||||
|
||||
// Get DISPID for name passed...
|
||||
HRESULT hr = pDisp.GetIDsOfNames(Guid.IID_NULL, ptName, 1,
|
||||
LOCALE_USER_DEFAULT, pdispID);
|
||||
|
||||
COMUtils.checkAutoRC(hr);
|
||||
|
||||
// Handle special-case for property-puts!
|
||||
if (nType == OleAuto.DISPATCH_PROPERTYPUT) {
|
||||
dp.cNamedArgs = new UINT(pArgs.length);
|
||||
dp.rgdispidNamedArgs = new DISPIDbyReference(
|
||||
OaIdl.DISPID_PROPERTYPUT);
|
||||
}
|
||||
|
||||
// Build DISPPARAMS
|
||||
if ((pArgs != null) && (pArgs.length > 0)) {
|
||||
dp.cArgs = new UINT(pArgs.length);
|
||||
dp.rgvarg = variantArg;
|
||||
|
||||
// write 'DISPPARAMS' structure to memory
|
||||
dp.write();
|
||||
}
|
||||
|
||||
// Make the call!
|
||||
hr = pDisp.Invoke(pdispID.getValue(), Guid.IID_NULL,
|
||||
LOCALE_SYSTEM_DEFAULT, new DISPID(nType), dp, pvResult,
|
||||
pExcepInfo, puArgErr);
|
||||
|
||||
COMUtils.checkAutoRC(hr, pExcepInfo, puArgErr);
|
||||
return hr;
|
||||
}
|
||||
|
||||
protected HRESULT oleMethod(int nType, VARIANT.ByReference pvResult,
|
||||
IDispatch pDisp, String name, VARIANT pArg) throws COMException {
|
||||
|
||||
return this.oleMethod(nType, pvResult, pDisp, name,
|
||||
new VARIANT[] { pArg });
|
||||
}
|
||||
|
||||
protected HRESULT oleMethod(int nType, VARIANT.ByReference pvResult,
|
||||
IDispatch pDisp, String name) throws COMException {
|
||||
|
||||
return this.oleMethod(nType, pvResult, pDisp, name, (VARIANT[]) null);
|
||||
}
|
||||
|
||||
protected void checkFailed(HRESULT hr) {
|
||||
COMUtils.checkAutoRC(hr, null, null);
|
||||
}
|
||||
|
||||
public IDispatch getIDispatch() {
|
||||
return iDispatch;
|
||||
}
|
||||
|
||||
public PointerByReference getIDispatchPointer() {
|
||||
return pDispatch;
|
||||
}
|
||||
|
||||
public IUnknown getIUnknown() {
|
||||
return iUnknown;
|
||||
}
|
||||
|
||||
public PointerByReference getIUnknownPointer() {
|
||||
return pUnknown;
|
||||
}
|
||||
|
||||
public void release() {
|
||||
if (this.iDispatch != null)
|
||||
this.iDispatch.Release();
|
||||
|
||||
Ole32.INSTANCE.CoUninitialize();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,355 @@
|
||||
package com.sun.jna.platform.win32.COM;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import com.sun.jna.Native;
|
||||
import com.sun.jna.platform.win32.Advapi32;
|
||||
import com.sun.jna.platform.win32.Advapi32Util;
|
||||
import com.sun.jna.platform.win32.Advapi32Util.EnumKey;
|
||||
import com.sun.jna.platform.win32.Advapi32Util.InfoKey;
|
||||
import com.sun.jna.platform.win32.OaIdl.EXCEPINFO;
|
||||
import com.sun.jna.platform.win32.W32Errors;
|
||||
import com.sun.jna.platform.win32.Win32Exception;
|
||||
import com.sun.jna.platform.win32.WinError;
|
||||
import com.sun.jna.platform.win32.WinNT;
|
||||
import com.sun.jna.platform.win32.WinNT.HRESULT;
|
||||
import com.sun.jna.platform.win32.WinReg;
|
||||
import com.sun.jna.platform.win32.WinReg.HKEYByReference;
|
||||
import com.sun.jna.ptr.IntByReference;
|
||||
|
||||
// TODO: Auto-generated Javadoc
|
||||
/**
|
||||
* The Class COMUtils.
|
||||
*/
|
||||
public abstract class COMUtils {
|
||||
|
||||
/** The Constant CO_E_NOTINITIALIZED. */
|
||||
public static final int S_OK = 0, S_FALSE = 1,
|
||||
REGDB_E_CLASSNOTREG = 0x80040154,
|
||||
CLASS_E_NOAGGREGATION = 0x80040110,
|
||||
CO_E_NOTINITIALIZED = 0x800401F0;
|
||||
|
||||
/** The Constant E_UNEXPECTED. */
|
||||
public static final int E_UNEXPECTED = 0x8000FFFF;
|
||||
|
||||
/** The Constant E_NOTIMPL. */
|
||||
public static final int E_NOTIMPL = 0x80004001;
|
||||
|
||||
/** The Constant E_OUTOFMEMORY. */
|
||||
public static final int E_OUTOFMEMORY = 0x8007000E;
|
||||
|
||||
/** The Constant E_INVALIDARG. */
|
||||
public static final int E_INVALIDARG = 0x80070057;
|
||||
|
||||
/** The Constant E_NOINTERFACE. */
|
||||
public static final int E_NOINTERFACE = 0x80004002;
|
||||
|
||||
/** The Constant E_POINTER. */
|
||||
public static final int E_POINTER = 0x80004003;
|
||||
|
||||
/** The Constant E_HANDLE. */
|
||||
public static final int E_HANDLE = 0x80070006;
|
||||
|
||||
/** The Constant E_ABORT. */
|
||||
public static final int E_ABORT = 0x80004004;
|
||||
|
||||
/** The Constant E_FAIL. */
|
||||
public static final int E_FAIL = 0x80004005;
|
||||
|
||||
/** The Constant E_ACCESSDENIED. */
|
||||
public static final int E_ACCESSDENIED = 0x80070005;
|
||||
|
||||
/** The Constant DISP_E_BADVARTYPE. */
|
||||
public static final int DISP_E_BADVARTYPE = -2147352568;
|
||||
|
||||
/** The Constant DISP_E_NOTACOLLECTION. */
|
||||
public static final int DISP_E_NOTACOLLECTION = -2147352559;
|
||||
|
||||
/** The Constant DISP_E_MEMBERNOTFOUND. */
|
||||
public static final int DISP_E_MEMBERNOTFOUND = -2147352573;
|
||||
|
||||
/** The Constant DISP_E_ARRAYISLOCKED. */
|
||||
public static final int DISP_E_ARRAYISLOCKED = -2147352563;
|
||||
|
||||
/** The Constant DISP_E_EXCEPTION. */
|
||||
public static final int DISP_E_EXCEPTION = -2147352567;
|
||||
|
||||
/** The Constant DISP_E_TYPEMISMATCH. */
|
||||
public static final int DISP_E_TYPEMISMATCH = -2147352571;
|
||||
|
||||
/** The Constant DISP_E_BADINDEX. */
|
||||
public static final int DISP_E_BADINDEX = -2147352565;
|
||||
|
||||
/** The Constant DISP_E_BADCALLEE. */
|
||||
public static final int DISP_E_BADCALLEE = -2147352560;
|
||||
|
||||
/** The Constant DISP_E_OVERFLOW. */
|
||||
public static final int DISP_E_OVERFLOW = -2147352566;
|
||||
|
||||
/** The Constant DISP_E_UNKNOWNINTERFACE. */
|
||||
public static final int DISP_E_UNKNOWNINTERFACE = -2147352575;
|
||||
|
||||
/** The Constant DISP_E_DIVBYZERO. */
|
||||
public static final int DISP_E_DIVBYZERO = -2147352558;
|
||||
|
||||
/** The Constant DISP_E_UNKNOWNLCID. */
|
||||
public static final int DISP_E_UNKNOWNLCID = -2147352564;
|
||||
|
||||
/** The Constant DISP_E_PARAMNOTOPTIONAL. */
|
||||
public static final int DISP_E_PARAMNOTOPTIONAL = -2147352561;
|
||||
|
||||
/** The Constant DISP_E_PARAMNOTFOUND. */
|
||||
public static final int DISP_E_PARAMNOTFOUND = -2147352572;
|
||||
|
||||
/** The Constant DISP_E_BADPARAMCOUNT. */
|
||||
public static final int DISP_E_BADPARAMCOUNT = -2147352562;
|
||||
|
||||
/** The Constant DISP_E_BUFFERTOOSMALL. */
|
||||
public static final int DISP_E_BUFFERTOOSMALL = -2147352557;
|
||||
|
||||
/** The Constant DISP_E_UNKNOWNNAME. */
|
||||
public static final int DISP_E_UNKNOWNNAME = -2147352570;
|
||||
|
||||
/** The Constant DISP_E_NONAMEDARGS. */
|
||||
public static final int DISP_E_NONAMEDARGS = -2147352569;
|
||||
|
||||
/** The Constant CO_E_OBJNOTCONNECTED. */
|
||||
public static final int CO_E_OBJNOTCONNECTED = -2147220995;
|
||||
|
||||
/**
|
||||
* Succeeded.
|
||||
*
|
||||
* @param hr
|
||||
* the hr
|
||||
* @return true, if successful
|
||||
*/
|
||||
public static boolean SUCCEEDED(HRESULT hr) {
|
||||
return SUCCEEDED(hr.intValue());
|
||||
}
|
||||
|
||||
/**
|
||||
* Succeeded.
|
||||
*
|
||||
* @param hr
|
||||
* the hr
|
||||
* @return true, if successful
|
||||
*/
|
||||
public static boolean SUCCEEDED(int hr) {
|
||||
if (hr == S_OK)
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Failed.
|
||||
*
|
||||
* @param hr
|
||||
* the hr
|
||||
* @return true, if successful
|
||||
*/
|
||||
public static boolean FAILED(HRESULT hr) {
|
||||
return FAILED(hr.intValue());
|
||||
}
|
||||
|
||||
/**
|
||||
* Failed.
|
||||
*
|
||||
* @param hr
|
||||
* the hr
|
||||
* @return true, if successful
|
||||
*/
|
||||
public static boolean FAILED(int hr) {
|
||||
if (hr != S_OK)
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Throw new exception.
|
||||
*
|
||||
* @param hr
|
||||
* the hr
|
||||
*/
|
||||
public static void checkAutoRC(HRESULT hr) {
|
||||
checkAutoRC(hr, null, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Throw new exception.
|
||||
*
|
||||
* @param hr
|
||||
* the hr
|
||||
* @param pExcepInfo
|
||||
* the excep info
|
||||
* @param puArgErr
|
||||
* the pu arg err
|
||||
*/
|
||||
public static void checkAutoRC(HRESULT hr, EXCEPINFO pExcepInfo,
|
||||
IntByReference puArgErr) {
|
||||
switch (hr.intValue()) {
|
||||
case S_OK:
|
||||
return;
|
||||
case E_NOTIMPL:
|
||||
throw new COMException("Not implemented!");
|
||||
case E_INVALIDARG:
|
||||
throw new COMException("Invalid argument!");
|
||||
case E_OUTOFMEMORY:
|
||||
throw new COMException("Out of memory!");
|
||||
case E_UNEXPECTED:
|
||||
throw new COMException("Error "
|
||||
+ Integer.toHexString(hr.intValue()));
|
||||
case CO_E_NOTINITIALIZED:
|
||||
throw new COMException("CoInitialized wasn't called!");
|
||||
case E_NOINTERFACE:
|
||||
throw new COMException("Interface does not inherit from class!");
|
||||
case E_POINTER:
|
||||
throw new COMException("Allocated pointer pointer is null!");
|
||||
case DISP_E_UNKNOWNNAME:
|
||||
throw new COMException(
|
||||
"One or more of the names were not known. The returned array of DISPIDs contains DISPID_UNKNOWN for each entry that corresponds to an unknown name!");
|
||||
case DISP_E_UNKNOWNLCID:
|
||||
throw new COMException(
|
||||
"The locale identifier (LCID) was not recognized!");
|
||||
case DISP_E_BADPARAMCOUNT:
|
||||
throw new COMException(
|
||||
"The number of elements provided to DISPPARAMS is different from the number of arguments accepted by the method or property!");
|
||||
case DISP_E_BADVARTYPE:
|
||||
throw new COMException(
|
||||
"One of the arguments in DISPPARAMS is not a valid variant type!");
|
||||
case DISP_E_EXCEPTION:
|
||||
throw new COMException(
|
||||
"The application needs to raise an exception. In this case, the structure passed in pexcepinfo should be filled in!",
|
||||
pExcepInfo, puArgErr);
|
||||
case DISP_E_MEMBERNOTFOUND:
|
||||
throw new COMException("The requested member does not exist!");
|
||||
case DISP_E_NONAMEDARGS:
|
||||
throw new COMException(
|
||||
"This implementation of IDispatch does not support named arguments!");
|
||||
case DISP_E_OVERFLOW:
|
||||
throw new COMException(
|
||||
"One of the arguments in DISPPARAMS could not be coerced to the specified type!");
|
||||
case DISP_E_PARAMNOTFOUND:
|
||||
throw new COMException(
|
||||
"One of the parameter IDs does not correspond to a parameter on the method. In this case, puArgErr is set to the first argument that contains the error!",
|
||||
pExcepInfo, puArgErr);
|
||||
case DISP_E_TYPEMISMATCH:
|
||||
throw new COMException(
|
||||
"One or more of the arguments could not be coerced. The index of the first parameter with the incorrect type within rgvarg is returned in puArgErr!",
|
||||
pExcepInfo, puArgErr);
|
||||
case DISP_E_UNKNOWNINTERFACE:
|
||||
throw new COMException(
|
||||
"The interface identifier passed in riid is not IID_NULL!");
|
||||
case CO_E_OBJNOTCONNECTED:
|
||||
throw new COMException(
|
||||
"The method is not connected to the Dispatch pointer!");
|
||||
default:
|
||||
throw new COMException("Unexpected COM error code : "
|
||||
+ toHexStr(hr));
|
||||
}
|
||||
}
|
||||
|
||||
public static void checkTypeLibRC(HRESULT hr) {
|
||||
switch (hr.intValue()) {
|
||||
case S_OK:
|
||||
return;
|
||||
case WinError.E_INVALIDARG:
|
||||
throw new COMException("One or more of the arguments is not valid.");
|
||||
case WinError.E_OUTOFMEMORY:
|
||||
throw new COMException(
|
||||
"Insufficient memory to complete the operation.");
|
||||
case WinError.TYPE_E_IOERROR:
|
||||
throw new COMException("The function could not write to the file.");
|
||||
case WinError.TYPE_E_INVALIDSTATE:
|
||||
throw new COMException("The type library could not be opened.");
|
||||
case WinError.TYPE_E_INVDATAREAD:
|
||||
throw new COMException(
|
||||
"The function could not read from the file. ");
|
||||
case WinError.TYPE_E_UNSUPFORMAT:
|
||||
throw new COMException("The type library has an older format.");
|
||||
case WinError.TYPE_E_UNKNOWNLCID:
|
||||
throw new COMException(
|
||||
"The LCID could not be found in the OLE-supported DLLs.");
|
||||
case WinError.TYPE_E_CANTLOADLIBRARY:
|
||||
throw new COMException(
|
||||
"The type library or DLL could not be loaded.");
|
||||
case WinError.TYPE_E_ELEMENTNOTFOUND:
|
||||
throw new COMException(
|
||||
"No type description was found in the library with the specified GUID.");
|
||||
default:
|
||||
throw new COMException("Unexpected Typelib error code : "
|
||||
+ toHexStr(hr));
|
||||
}
|
||||
}
|
||||
|
||||
public static ArrayList<COMInfo> getAllCOMInfoOnSystem() {
|
||||
HKEYByReference phkResult = new HKEYByReference();
|
||||
HKEYByReference phkResult2 = new HKEYByReference();
|
||||
String subKey;
|
||||
ArrayList<COMInfo> comInfos = new ArrayList<COMUtils.COMInfo>();
|
||||
|
||||
try {
|
||||
// open root key
|
||||
phkResult = Advapi32Util.registryGetKey(WinReg.HKEY_CLASSES_ROOT, "CLSID", WinNT.KEY_ALL_ACCESS);
|
||||
// open subkey
|
||||
InfoKey infoKey = Advapi32Util.registryQueryInfoKey(phkResult.getValue(), WinNT.KEY_ALL_ACCESS);
|
||||
|
||||
for (int i = 0; i < infoKey.lpcSubKeys.getValue(); i++) {
|
||||
EnumKey enumKey = Advapi32Util.registryRegEnumKey(phkResult.getValue(), i);
|
||||
subKey = Native.toString(enumKey.lpName);
|
||||
|
||||
COMInfo comInfo = new COMInfo(subKey);
|
||||
|
||||
phkResult2 = Advapi32Util.registryGetKey(phkResult.getValue(), subKey, WinNT.KEY_ALL_ACCESS);
|
||||
InfoKey infoKey2 = Advapi32Util.registryQueryInfoKey(phkResult2.getValue(), WinNT.KEY_ALL_ACCESS);
|
||||
|
||||
for (int y = 0; y < infoKey2.lpcSubKeys.getValue(); y++)
|
||||
{
|
||||
EnumKey enumKey2 = Advapi32Util.registryRegEnumKey(phkResult2.getValue(), y);
|
||||
String subKey2 = Native.toString(enumKey2.lpName);
|
||||
|
||||
if(subKey2.equals("InprocHandler32")) {
|
||||
comInfo.inprocHandler32 = (String)Advapi32Util.registryGetValue(phkResult2.getValue(), subKey2, null);
|
||||
}else if(subKey2.equals("InprocServer32")) {
|
||||
comInfo.inprocServer32 = (String)Advapi32Util.registryGetValue(phkResult2.getValue(), subKey2, null);
|
||||
}else if(subKey2.equals("LocalServer32")) {
|
||||
comInfo.localServer32 = (String)Advapi32Util.registryGetValue(phkResult2.getValue(), subKey2, null);
|
||||
}else if(subKey2.equals("ProgID")) {
|
||||
comInfo.progID = (String)Advapi32Util.registryGetValue(phkResult2.getValue(), subKey2, null);
|
||||
}else if(subKey2.equals("TypeLib")) {
|
||||
comInfo.typeLib = (String)Advapi32Util.registryGetValue(phkResult2.getValue(), subKey2, null);
|
||||
}
|
||||
}
|
||||
|
||||
Advapi32.INSTANCE.RegCloseKey(phkResult2.getValue());
|
||||
comInfos.add(comInfo);
|
||||
}
|
||||
} finally {
|
||||
Advapi32.INSTANCE.RegCloseKey(phkResult.getValue());
|
||||
Advapi32.INSTANCE.RegCloseKey(phkResult2.getValue());
|
||||
}
|
||||
|
||||
return comInfos;
|
||||
}
|
||||
|
||||
public static class COMInfo {
|
||||
public String clsid;
|
||||
public String inprocHandler32;
|
||||
public String inprocServer32;
|
||||
public String localServer32;
|
||||
public String progID;
|
||||
public String typeLib;
|
||||
|
||||
public COMInfo() {
|
||||
}
|
||||
|
||||
public COMInfo(String clsid) {
|
||||
this.clsid = clsid;
|
||||
}
|
||||
}
|
||||
|
||||
private static String toHexStr(HRESULT hr) {
|
||||
return "0x" + Integer.toHexString(hr.intValue()).toUpperCase();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,164 @@
|
||||
/* Copyright (c) 2012 Tobias Wolf, All Rights Reserved
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*/
|
||||
package com.sun.jna.platform.win32.COM;
|
||||
|
||||
import com.sun.jna.Function;
|
||||
import com.sun.jna.Pointer;
|
||||
import com.sun.jna.Structure;
|
||||
import com.sun.jna.WString;
|
||||
import com.sun.jna.platform.win32.Guid.IID;
|
||||
import com.sun.jna.platform.win32.OaIdl.DISPID;
|
||||
import com.sun.jna.platform.win32.OaIdl.DISPIDbyReference;
|
||||
import com.sun.jna.platform.win32.OaIdl.EXCEPINFO;
|
||||
import com.sun.jna.platform.win32.OleAuto.DISPPARAMS;
|
||||
import com.sun.jna.platform.win32.Variant.VARIANT;
|
||||
import com.sun.jna.platform.win32.WinDef.LCID;
|
||||
import com.sun.jna.platform.win32.WinDef.UINT;
|
||||
import com.sun.jna.platform.win32.WinNT.HRESULT;
|
||||
import com.sun.jna.ptr.IntByReference;
|
||||
import com.sun.jna.ptr.PointerByReference;
|
||||
|
||||
/**
|
||||
* Wrapper class for the IDispatch interface
|
||||
*
|
||||
* IDispatch.GetTypeInfoCount 12 IDispatch.GetTypeInfo 16
|
||||
* IDispatch.GetIDsOfNames 20 IDispatch.Invoke 24
|
||||
*
|
||||
* @author Tobias Wolf, wolf.tobias@gmx.net
|
||||
*/
|
||||
public class IDispatch extends IUnknown {
|
||||
|
||||
/**
|
||||
* The Class ByReference.
|
||||
*/
|
||||
public static class ByReference extends IDispatch implements
|
||||
Structure.ByReference {
|
||||
}
|
||||
|
||||
/** The Constant IID_IDispatch. */
|
||||
public final static IID IID_IDispatch = new IID(
|
||||
"00020400-0000-0000-C000-000000000046");
|
||||
|
||||
/**
|
||||
* Instantiates a new i dispatch.
|
||||
*/
|
||||
public IDispatch() {
|
||||
}
|
||||
|
||||
/**
|
||||
* Instantiates a new i dispatch.
|
||||
*
|
||||
* @param pvInstance
|
||||
* the pv instance
|
||||
*/
|
||||
public IDispatch(Pointer pvInstance) {
|
||||
super(pvInstance);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the type info count.
|
||||
*
|
||||
* @param pctinfo
|
||||
* the pctinfo
|
||||
* @return the hresult
|
||||
*/
|
||||
public HRESULT GetTypeInfoCount(IntByReference pctinfo) {
|
||||
Pointer vptr = this.getPointer().getPointer(0);
|
||||
Function func = Function.getFunction(vptr.getPointer(12));
|
||||
int hr = func.invokeInt(new Object[] { this.getPointer(), pctinfo });
|
||||
|
||||
return new HRESULT(hr);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the type info.
|
||||
*
|
||||
* @param iTInfo
|
||||
* the i t info
|
||||
* @param lcid
|
||||
* the lcid
|
||||
* @param ppTInfo
|
||||
* the pp t info
|
||||
* @return the hresult
|
||||
*/
|
||||
public HRESULT GetTypeInfo(UINT iTInfo, LCID lcid,
|
||||
PointerByReference ppTInfo) {
|
||||
Pointer vptr = this.getPointer().getPointer(0);
|
||||
Function func = Function.getFunction(vptr.getPointer(16));
|
||||
int hr = func.invokeInt(new Object[] { this.getPointer(), iTInfo, lcid,
|
||||
ppTInfo });
|
||||
|
||||
return new HRESULT(hr);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the i ds of names.
|
||||
*
|
||||
* @param riid
|
||||
* the riid
|
||||
* @param rgszNames
|
||||
* the rgsz names
|
||||
* @param cNames
|
||||
* the c names
|
||||
* @param lcid
|
||||
* the lcid
|
||||
* @param rgDispId
|
||||
* the rg disp id
|
||||
* @return the hresult
|
||||
*/
|
||||
public HRESULT GetIDsOfNames(IID riid, WString[] rgszNames, int cNames,
|
||||
LCID lcid, DISPIDbyReference rgDispId) {
|
||||
|
||||
Pointer vptr = this.getPointer().getPointer(0);
|
||||
Function func = Function.getFunction(vptr.getPointer(20));
|
||||
int hr = func.invokeInt(new Object[] { this.getPointer(), riid,
|
||||
rgszNames, cNames, lcid, rgDispId });
|
||||
|
||||
return new HRESULT(hr);
|
||||
}
|
||||
|
||||
/**
|
||||
* Invoke.
|
||||
*
|
||||
* @param dispIdMember
|
||||
* the disp id member
|
||||
* @param riid
|
||||
* the riid
|
||||
* @param lcid
|
||||
* the lcid
|
||||
* @param wFlags
|
||||
* the w flags
|
||||
* @param pDispParams
|
||||
* the disp params
|
||||
* @param pVarResult
|
||||
* the var result
|
||||
* @param pExcepInfo
|
||||
* the excep info
|
||||
* @param puArgErr
|
||||
* the pu arg err
|
||||
* @return the hresult
|
||||
*/
|
||||
public HRESULT Invoke(DISPID dispIdMember, IID riid, LCID lcid,
|
||||
DISPID wFlags, DISPPARAMS pDispParams,
|
||||
VARIANT.ByReference pVarResult, EXCEPINFO.ByReference pExcepInfo,
|
||||
IntByReference puArgErr) {
|
||||
|
||||
Pointer vptr = this.getPointer().getPointer(0);
|
||||
Function func = Function.getFunction(vptr.getPointer(24));
|
||||
int hr = func.invokeInt(new Object[] { this.getPointer(), dispIdMember,
|
||||
riid, lcid, wFlags, pDispParams, pVarResult, pExcepInfo,
|
||||
puArgErr });
|
||||
|
||||
return new HRESULT(hr);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,282 @@
|
||||
/* Copyright (c) 2012 Tobias Wolf, All Rights Reserved
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*/
|
||||
package com.sun.jna.platform.win32.COM;
|
||||
|
||||
import com.sun.jna.Pointer;
|
||||
import com.sun.jna.WString;
|
||||
import com.sun.jna.platform.win32.Guid.GUID;
|
||||
import com.sun.jna.platform.win32.Guid.IID;
|
||||
import com.sun.jna.platform.win32.Variant.VARIANT;
|
||||
import com.sun.jna.platform.win32.WTypes.BSTR;
|
||||
import com.sun.jna.platform.win32.WinDef.BOOL;
|
||||
import com.sun.jna.platform.win32.WinDef.PVOID;
|
||||
import com.sun.jna.platform.win32.WinDef.ULONG;
|
||||
import com.sun.jna.platform.win32.WinNT.HRESULT;
|
||||
|
||||
/**
|
||||
* Wrapper class for the IRecordInfo interface
|
||||
*
|
||||
* @author Tobias Wolf, wolf.tobias@gmx.net
|
||||
*/
|
||||
public class IRecordInfo extends IUnknown {
|
||||
|
||||
/** The Constant IID_IRecordInfo. */
|
||||
public final static IID IID_IRecordInfo = new IID(
|
||||
"{0000002F-0000-0000-C000-000000000046}");
|
||||
|
||||
/**
|
||||
* Instantiates a new i record info.
|
||||
*/
|
||||
public IRecordInfo() {
|
||||
}
|
||||
|
||||
/**
|
||||
* Instantiates a new i record info.
|
||||
*
|
||||
* @param pvInstance
|
||||
* the pv instance
|
||||
*/
|
||||
public IRecordInfo(Pointer pvInstance) {
|
||||
super(pvInstance);
|
||||
}
|
||||
|
||||
/**
|
||||
* Record init.
|
||||
*
|
||||
* @param pvNew
|
||||
* the pv new
|
||||
* @return the hresult
|
||||
*/
|
||||
public HRESULT RecordInit(/* [out] */PVOID pvNew) {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Record clear.
|
||||
*
|
||||
* @param pvExisting
|
||||
* the pv existing
|
||||
* @return the hresult
|
||||
*/
|
||||
public HRESULT RecordClear(
|
||||
/* [in] */PVOID pvExisting) {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Record copy.
|
||||
*
|
||||
* @param pvExisting
|
||||
* the pv existing
|
||||
* @param pvNew
|
||||
* the pv new
|
||||
* @return the hresult
|
||||
*/
|
||||
public HRESULT RecordCopy(
|
||||
/* [in] */PVOID pvExisting,
|
||||
/* [out] */PVOID pvNew) {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the guid.
|
||||
*
|
||||
* @param pguid
|
||||
* the pguid
|
||||
* @return the hresult
|
||||
*/
|
||||
public HRESULT GetGuid(
|
||||
/* [out] */GUID pguid) {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the name.
|
||||
*
|
||||
* @param pbstrName
|
||||
* the pbstr name
|
||||
* @return the hresult
|
||||
*/
|
||||
public HRESULT GetName(
|
||||
/* [out] */BSTR pbstrName) {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the size.
|
||||
*
|
||||
* @param pcbSize
|
||||
* the pcb size
|
||||
* @return the hresult
|
||||
*/
|
||||
public HRESULT GetSize(
|
||||
/* [out] */ULONG pcbSize) {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the type info.
|
||||
*
|
||||
* @param ppTypeInfo
|
||||
* the pp type info
|
||||
* @return the hresult
|
||||
*/
|
||||
public HRESULT GetTypeInfo(
|
||||
/* [out] */ITypeInfo ppTypeInfo) {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the field.
|
||||
*
|
||||
* @param pvData
|
||||
* the pv data
|
||||
* @param szFieldName
|
||||
* the sz field name
|
||||
* @param pvarField
|
||||
* the pvar field
|
||||
* @return the hresult
|
||||
*/
|
||||
public HRESULT GetField(
|
||||
/* [in] */PVOID pvData,
|
||||
/* [in] */WString szFieldName,
|
||||
/* [out] */VARIANT pvarField) {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the field no copy.
|
||||
*
|
||||
* @param pvData
|
||||
* the pv data
|
||||
* @param szFieldName
|
||||
* the sz field name
|
||||
* @param pvarField
|
||||
* the pvar field
|
||||
* @param ppvDataCArray
|
||||
* the ppv data c array
|
||||
* @return the hresult
|
||||
*/
|
||||
public HRESULT GetFieldNoCopy(
|
||||
/* [in] */PVOID pvData,
|
||||
/* [in] */WString szFieldName,
|
||||
/* [out] */VARIANT pvarField,
|
||||
/* [out] */PVOID ppvDataCArray) {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Put field.
|
||||
*
|
||||
* @param wFlags
|
||||
* the w flags
|
||||
* @param pvData
|
||||
* the pv data
|
||||
* @param szFieldName
|
||||
* the sz field name
|
||||
* @param pvarField
|
||||
* the pvar field
|
||||
* @return the hresult
|
||||
*/
|
||||
public HRESULT PutField(
|
||||
/* [in] */ULONG wFlags,
|
||||
/* [out][in] */PVOID pvData,
|
||||
/* [in] */WString szFieldName,
|
||||
/* [in] */VARIANT pvarField) {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Put field no copy.
|
||||
*
|
||||
* @param wFlags
|
||||
* the w flags
|
||||
* @param pvData
|
||||
* the pv data
|
||||
* @param szFieldName
|
||||
* the sz field name
|
||||
* @param pvarField
|
||||
* the pvar field
|
||||
* @return the hresult
|
||||
*/
|
||||
public HRESULT PutFieldNoCopy(
|
||||
/* [in] */ULONG wFlags,
|
||||
/* [out][in] */PVOID pvData,
|
||||
/* [in] */WString szFieldName,
|
||||
/* [in] */VARIANT pvarField) {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the field names.
|
||||
*
|
||||
* @param pcNames
|
||||
* the pc names
|
||||
* @param rgBstrNames
|
||||
* the rg bstr names
|
||||
* @return the hresult
|
||||
*/
|
||||
public HRESULT GetFieldNames(
|
||||
/* [out][in] */ULONG pcNames,
|
||||
/* [length_is][size_is][out] */BSTR rgBstrNames) {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if is matching type.
|
||||
*
|
||||
* @param pRecordInfo
|
||||
* the record info
|
||||
* @return the bool
|
||||
*/
|
||||
public BOOL IsMatchingType(
|
||||
/* [in] */IRecordInfo pRecordInfo) {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Record create.
|
||||
*
|
||||
* @return the pvoid
|
||||
*/
|
||||
public PVOID RecordCreate() {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Record create copy.
|
||||
*
|
||||
* @param pvSource
|
||||
* the pv source
|
||||
* @param ppvDest
|
||||
* the ppv dest
|
||||
* @return the hresult
|
||||
*/
|
||||
public HRESULT RecordCreateCopy(
|
||||
/* [in] */PVOID pvSource,
|
||||
/* [out] */PVOID ppvDest) {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Record destroy.
|
||||
*
|
||||
* @param pvRecord
|
||||
* the pv record
|
||||
* @return the hresult
|
||||
*/
|
||||
public HRESULT RecordDestroy(
|
||||
/* [in] */PVOID pvRecord) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,74 @@
|
||||
/* Copyright (c) 2012 Tobias Wolf, All Rights Reserved
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*/
|
||||
package com.sun.jna.platform.win32.COM;
|
||||
|
||||
import com.sun.jna.Function;
|
||||
import com.sun.jna.Pointer;
|
||||
import com.sun.jna.Structure;
|
||||
import com.sun.jna.WString;
|
||||
import com.sun.jna.platform.win32.OaIdl.BINDPTR;
|
||||
import com.sun.jna.platform.win32.OaIdl.DESCKIND;
|
||||
import com.sun.jna.platform.win32.WinDef.ULONG;
|
||||
import com.sun.jna.platform.win32.WinDef.WORD;
|
||||
import com.sun.jna.platform.win32.WinNT.HRESULT;
|
||||
|
||||
/**
|
||||
* Wrapper class for the ITypeComp interface
|
||||
*
|
||||
* @author Tobias Wolf, wolf.tobias@gmx.net
|
||||
*/
|
||||
public class ITypeComp extends IUnknown {
|
||||
|
||||
public static class ByReference extends ITypeComp implements
|
||||
Structure.ByReference {
|
||||
}
|
||||
|
||||
public ITypeComp() {
|
||||
}
|
||||
|
||||
public ITypeComp(Pointer pvInstance) {
|
||||
super(pvInstance);
|
||||
}
|
||||
|
||||
public HRESULT Bind(
|
||||
/* [annotation][in] */
|
||||
WString szName,
|
||||
/* [in] */ULONG lHashVal,
|
||||
/* [in] */WORD wFlags,
|
||||
/* [out] */ITypeInfo.ByReference ppTInfo,
|
||||
/* [out] */DESCKIND.ByReference pDescKind,
|
||||
/* [out] */BINDPTR.ByReference pBindPtr) {
|
||||
|
||||
Pointer vptr = this.getPointer().getPointer(0);
|
||||
Function func = Function.getFunction(vptr.getPointer(12));
|
||||
int hr = func.invokeInt(new Object[] { this.getPointer(), szName,
|
||||
lHashVal, wFlags, ppTInfo, pDescKind, pBindPtr });
|
||||
|
||||
return new HRESULT(hr);
|
||||
}
|
||||
|
||||
public HRESULT BindType(
|
||||
/* [annotation][in] */
|
||||
WString szName,
|
||||
/* [in] */ULONG lHashVal,
|
||||
/* [out] */ITypeInfo.ByReference ppTInfo,
|
||||
/* [out] */ITypeComp.ByReference ppTComp) {
|
||||
|
||||
Pointer vptr = this.getPointer().getPointer(0);
|
||||
Function func = Function.getFunction(vptr.getPointer(16));
|
||||
int hr = func.invokeInt(new Object[] { this.getPointer(), szName,
|
||||
lHashVal, ppTInfo, ppTComp });
|
||||
|
||||
return new HRESULT(hr);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,293 @@
|
||||
/* Copyright (c) 2012 Tobias Wolf, All Rights Reserved
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*/
|
||||
package com.sun.jna.platform.win32.COM;
|
||||
|
||||
import com.sun.jna.Function;
|
||||
import com.sun.jna.Pointer;
|
||||
import com.sun.jna.Structure;
|
||||
import com.sun.jna.WString;
|
||||
import com.sun.jna.platform.win32.Guid.REFIID;
|
||||
import com.sun.jna.platform.win32.OaIdl.EXCEPINFO;
|
||||
import com.sun.jna.platform.win32.OaIdl.FUNCDESC;
|
||||
import com.sun.jna.platform.win32.OaIdl.HREFTYPE;
|
||||
import com.sun.jna.platform.win32.OaIdl.HREFTYPEbyReference;
|
||||
import com.sun.jna.platform.win32.OaIdl.INVOKEKIND;
|
||||
import com.sun.jna.platform.win32.OaIdl.MEMBERID;
|
||||
import com.sun.jna.platform.win32.OaIdl.MEMBERIDbyReference;
|
||||
import com.sun.jna.platform.win32.OaIdl.TYPEATTR;
|
||||
import com.sun.jna.platform.win32.OaIdl.VARDESC;
|
||||
import com.sun.jna.platform.win32.OleAuto.DISPPARAMS;
|
||||
import com.sun.jna.platform.win32.Variant.VARIANT;
|
||||
import com.sun.jna.platform.win32.WTypes.BSTR;
|
||||
import com.sun.jna.platform.win32.WTypes.BSTRByReference;
|
||||
import com.sun.jna.platform.win32.WinDef.DWORDbyReference;
|
||||
import com.sun.jna.platform.win32.WinDef.PVOID;
|
||||
import com.sun.jna.platform.win32.WinDef.UINT;
|
||||
import com.sun.jna.platform.win32.WinDef.UINTbyReference;
|
||||
import com.sun.jna.platform.win32.WinDef.WORD;
|
||||
import com.sun.jna.platform.win32.WinDef.WORDbyReference;
|
||||
import com.sun.jna.platform.win32.WinNT.HRESULT;
|
||||
import com.sun.jna.ptr.IntByReference;
|
||||
import com.sun.jna.ptr.PointerByReference;
|
||||
|
||||
/**
|
||||
* Wrapper class for the ITypeInfo interface
|
||||
*
|
||||
* @author Tobias Wolf, wolf.tobias@gmx.net
|
||||
*/
|
||||
public class ITypeInfo extends IUnknown {
|
||||
|
||||
public static class ByReference extends ITypeInfo implements
|
||||
Structure.ByReference {
|
||||
}
|
||||
|
||||
public ITypeInfo() {
|
||||
}
|
||||
|
||||
public ITypeInfo(Pointer pvInstance) {
|
||||
super(pvInstance);
|
||||
}
|
||||
|
||||
public HRESULT GetTypeAttr(
|
||||
/* [out] */TYPEATTR.ByReference pTypeAttr) {
|
||||
|
||||
Pointer vptr = this.getPointer().getPointer(0);
|
||||
Function func = Function.getFunction(vptr.getPointer(12));
|
||||
int hr = func.invokeInt(new Object[] { this.getPointer(), pTypeAttr });
|
||||
pTypeAttr.read();
|
||||
|
||||
return new HRESULT(hr);
|
||||
}
|
||||
|
||||
public HRESULT GetTypeComp(
|
||||
/* [out] */ITypeComp.ByReference pTComp) {
|
||||
|
||||
Pointer vptr = this.getPointer().getPointer(0);
|
||||
Function func = Function.getFunction(vptr.getPointer(16));
|
||||
PointerByReference ppTComp = new PointerByReference();
|
||||
int hr = func.invokeInt(new Object[] { this.getPointer(), ppTComp });
|
||||
pTComp.setPointer(ppTComp.getValue());
|
||||
|
||||
return new HRESULT(hr);
|
||||
}
|
||||
|
||||
public/* [local] */HRESULT GetFuncDesc(
|
||||
/* [in] */UINT index,
|
||||
/* [out] */FUNCDESC.ByReference pFuncDesc) {
|
||||
|
||||
Pointer vptr = this.getPointer().getPointer(0);
|
||||
Function func = Function.getFunction(vptr.getPointer(20));
|
||||
int hr = func.invokeInt(new Object[] { this.getPointer(), index,
|
||||
pFuncDesc });
|
||||
|
||||
return new HRESULT(hr);
|
||||
}
|
||||
|
||||
public/* [local] */HRESULT GetVarDesc(
|
||||
/* [in] */UINT index,
|
||||
/* [out] */VARDESC.ByReference pVarDesc) {
|
||||
|
||||
Pointer vptr = this.getPointer().getPointer(0);
|
||||
Function func = Function.getFunction(vptr.getPointer(24));
|
||||
int hr = func.invokeInt(new Object[] { this.getPointer(), index,
|
||||
pVarDesc });
|
||||
|
||||
return new HRESULT(hr);
|
||||
}
|
||||
|
||||
public/* [local] */HRESULT GetNames(
|
||||
/* [in] */MEMBERID memid,
|
||||
/* [length_is][size_is][out] */BSTR[] rgBstrNames,
|
||||
/* [in] */UINT cMaxNames,
|
||||
/* [out] */UINTbyReference pcNames) {
|
||||
|
||||
Pointer vptr = this.getPointer().getPointer(0);
|
||||
Function func = Function.getFunction(vptr.getPointer(28));
|
||||
int hr = func.invokeInt(new Object[] { this.getPointer(), memid,
|
||||
rgBstrNames, cMaxNames, pcNames });
|
||||
|
||||
return new HRESULT(hr);
|
||||
}
|
||||
|
||||
public HRESULT GetRefTypeOfImplType(
|
||||
/* [in] */UINT index,
|
||||
/* [out] */HREFTYPEbyReference pRefType) {
|
||||
|
||||
Pointer vptr = this.getPointer().getPointer(0);
|
||||
Function func = Function.getFunction(vptr.getPointer(32));
|
||||
int hr = func.invokeInt(new Object[] { this.getPointer(), index,
|
||||
pRefType });
|
||||
|
||||
return new HRESULT(hr);
|
||||
}
|
||||
|
||||
public HRESULT GetImplTypeFlags(
|
||||
/* [in] */UINT index,
|
||||
/* [out] */IntByReference pImplTypeFlags) {
|
||||
|
||||
Pointer vptr = this.getPointer().getPointer(0);
|
||||
Function func = Function.getFunction(vptr.getPointer(36));
|
||||
int hr = func.invokeInt(new Object[] { this.getPointer(), index,
|
||||
pImplTypeFlags });
|
||||
|
||||
return new HRESULT(hr);
|
||||
}
|
||||
|
||||
public/* [local] */HRESULT GetIDsOfNames(
|
||||
/* [size_is][in] */WString[] rgszNames,
|
||||
/* [in] */UINT cNames,
|
||||
/* [size_is][out] */MEMBERID[] pMemId) {
|
||||
|
||||
Pointer vptr = this.getPointer().getPointer(0);
|
||||
Function func = Function.getFunction(vptr.getPointer(40));
|
||||
int hr = func.invokeInt(new Object[] { this.getPointer(), rgszNames,
|
||||
cNames, pMemId });
|
||||
|
||||
return new HRESULT(hr);
|
||||
}
|
||||
|
||||
public/* [local] */HRESULT Invoke(
|
||||
/* [in] */PVOID pvInstance,
|
||||
/* [in] */MEMBERID memid,
|
||||
/* [in] */WORD wFlags,
|
||||
/* [out][in] */DISPPARAMS.ByReference pDispParams,
|
||||
/* [out] */VARIANT.ByReference pVarResult,
|
||||
/* [out] */EXCEPINFO.ByReference pExcepInfo,
|
||||
/* [out] */UINTbyReference puArgErr) {
|
||||
|
||||
Pointer vptr = this.getPointer().getPointer(0);
|
||||
Function func = Function.getFunction(vptr.getPointer(44));
|
||||
int hr = func.invokeInt(new Object[] { this.getPointer(), pvInstance,
|
||||
memid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr });
|
||||
|
||||
return new HRESULT(hr);
|
||||
}
|
||||
|
||||
public/* [local] */HRESULT GetDocumentation(
|
||||
/* [in] */MEMBERID memid,
|
||||
/* [out] */BSTR pBstrName,
|
||||
/* [out] */BSTR pBstrDocString,
|
||||
/* [out] */DWORDbyReference pdwHelpContext,
|
||||
/* [out] */BSTR pBstrHelpFile) {
|
||||
|
||||
Pointer vptr = this.getPointer().getPointer(0);
|
||||
Function func = Function.getFunction(vptr.getPointer(48));
|
||||
int hr = func.invokeInt(new Object[] { this.getPointer(), memid,
|
||||
pBstrName, pBstrDocString, pdwHelpContext, pBstrHelpFile });
|
||||
|
||||
return new HRESULT(hr);
|
||||
}
|
||||
|
||||
public/* [local] */HRESULT GetDllEntry(
|
||||
/* [in] */MEMBERID memid,
|
||||
/* [in] */INVOKEKIND invKind,
|
||||
/* [out] */BSTR pBstrDllName,
|
||||
/* [out] */BSTR pBstrName,
|
||||
/* [out] */WORDbyReference pwOrdinal) {
|
||||
|
||||
Pointer vptr = this.getPointer().getPointer(0);
|
||||
Function func = Function.getFunction(vptr.getPointer(52));
|
||||
int hr = func.invokeInt(new Object[] { this.getPointer(), memid,
|
||||
invKind, pBstrDllName, pBstrName, pwOrdinal });
|
||||
|
||||
return new HRESULT(hr);
|
||||
}
|
||||
|
||||
public HRESULT GetRefTypeInfo(
|
||||
/* [in] */HREFTYPE hRefType,
|
||||
/* [out] */ITypeInfo.ByReference ppTInfo) {
|
||||
|
||||
Pointer vptr = this.getPointer().getPointer(0);
|
||||
Function func = Function.getFunction(vptr.getPointer(56));
|
||||
int hr = func.invokeInt(new Object[] { this.getPointer(), hRefType,
|
||||
ppTInfo });
|
||||
|
||||
return new HRESULT(hr);
|
||||
}
|
||||
|
||||
public/* [local] */HRESULT AddressOfMember(
|
||||
/* [in] */MEMBERID memid,
|
||||
/* [in] */INVOKEKIND invKind,
|
||||
/* [out] */PointerByReference ppv) {
|
||||
|
||||
Pointer vptr = this.getPointer().getPointer(0);
|
||||
Function func = Function.getFunction(vptr.getPointer(60));
|
||||
int hr = func.invokeInt(new Object[] { this.getPointer(), memid,
|
||||
invKind, ppv });
|
||||
|
||||
return new HRESULT(hr);
|
||||
}
|
||||
|
||||
public/* [local] */HRESULT CreateInstance(
|
||||
/* [in] */IUnknown pUnkOuter,
|
||||
/* [in] */REFIID riid,
|
||||
/* [iid_is][out] */PointerByReference ppvObj) {
|
||||
|
||||
Pointer vptr = this.getPointer().getPointer(0);
|
||||
Function func = Function.getFunction(vptr.getPointer(64));
|
||||
int hr = func.invokeInt(new Object[] { this.getPointer(), pUnkOuter,
|
||||
riid, ppvObj });
|
||||
|
||||
return new HRESULT(hr);
|
||||
}
|
||||
|
||||
public HRESULT GetMops(
|
||||
/* [in] */MEMBERID memid,
|
||||
/* [out] */BSTR pBstrMops) {
|
||||
|
||||
Pointer vptr = this.getPointer().getPointer(0);
|
||||
Function func = Function.getFunction(vptr.getPointer(68));
|
||||
int hr = func.invokeInt(new Object[] { this.getPointer(), memid,
|
||||
pBstrMops });
|
||||
|
||||
return new HRESULT(hr);
|
||||
}
|
||||
|
||||
public/* [local] */HRESULT GetContainingTypeLib(
|
||||
/* [out] */ITypeLib.ByReference pTLib,
|
||||
/* [out] */UINTbyReference pIndex) {
|
||||
|
||||
Pointer vptr = this.getPointer().getPointer(0);
|
||||
Function func = Function.getFunction(vptr.getPointer(72));
|
||||
PointerByReference ppTLib = new PointerByReference();
|
||||
int hr = func.invokeInt(new Object[] { this.getPointer(), ppTLib,
|
||||
pIndex });
|
||||
pTLib.setPointer(ppTLib.getPointer());
|
||||
|
||||
return new HRESULT(hr);
|
||||
}
|
||||
|
||||
public/* [local] */void ReleaseTypeAttr(
|
||||
/* [in] */TYPEATTR pTypeAttr) {
|
||||
|
||||
Pointer vptr = this.getPointer().getPointer(0);
|
||||
Function func = Function.getFunction(vptr.getPointer(76));
|
||||
func.invokeInt(new Object[] { this.getPointer(), pTypeAttr });
|
||||
}
|
||||
|
||||
public/* [local] */void ReleaseFuncDesc(
|
||||
/* [in] */FUNCDESC pFuncDesc) {
|
||||
|
||||
Pointer vptr = this.getPointer().getPointer(0);
|
||||
Function func = Function.getFunction(vptr.getPointer(80));
|
||||
func.invokeInt(new Object[] { this.getPointer(), pFuncDesc });
|
||||
}
|
||||
|
||||
public/* [local] */void ReleaseVarDesc(
|
||||
/* [in] */VARDESC pVarDesc) {
|
||||
|
||||
Pointer vptr = this.getPointer().getPointer(0);
|
||||
Function func = Function.getFunction(vptr.getPointer(84));
|
||||
func.invokeInt(new Object[] { this.getPointer(), pVarDesc });
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,168 @@
|
||||
/* Copyright (c) 2012 Tobias Wolf, All Rights Reserved
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*/
|
||||
package com.sun.jna.platform.win32.COM;
|
||||
|
||||
import com.sun.jna.Function;
|
||||
import com.sun.jna.Pointer;
|
||||
import com.sun.jna.Structure;
|
||||
import com.sun.jna.WString;
|
||||
import com.sun.jna.platform.win32.Guid.GUID;
|
||||
import com.sun.jna.platform.win32.OaIdl.MEMBERIDbyReference;
|
||||
import com.sun.jna.platform.win32.OaIdl.TLIBATTR;
|
||||
import com.sun.jna.platform.win32.WTypes.BSTR;
|
||||
import com.sun.jna.platform.win32.WinDef.BOOLbyReference;
|
||||
import com.sun.jna.platform.win32.WinDef.DWORDbyReference;
|
||||
import com.sun.jna.platform.win32.WinDef.UINT;
|
||||
import com.sun.jna.platform.win32.WinDef.ULONG;
|
||||
import com.sun.jna.platform.win32.WinDef.USHORTbyReference;
|
||||
import com.sun.jna.platform.win32.WinNT.HRESULT;
|
||||
import com.sun.jna.ptr.IntByReference;
|
||||
import com.sun.jna.ptr.PointerByReference;
|
||||
|
||||
/**
|
||||
* Wrapper class for the ITypeLib interface
|
||||
*
|
||||
* @author Tobias Wolf, wolf.tobias@gmx.net
|
||||
*/
|
||||
public class ITypeLib extends IUnknown {
|
||||
|
||||
public static class ByReference extends IUnknown implements
|
||||
Structure.ByReference {
|
||||
}
|
||||
|
||||
public ITypeLib() {
|
||||
}
|
||||
|
||||
public ITypeLib(Pointer pvInstance) {
|
||||
super(pvInstance);
|
||||
}
|
||||
|
||||
public UINT GetTypeInfoCount() {
|
||||
Pointer vptr = this.getPointer().getPointer(0);
|
||||
Function func = Function.getFunction(vptr.getPointer(12));
|
||||
int count = func.invokeInt(new Object[] { this.getPointer() });
|
||||
|
||||
return new UINT(count);
|
||||
}
|
||||
|
||||
public HRESULT GetTypeInfo(
|
||||
/* [in] */UINT index,
|
||||
/* [out] */ITypeInfo.ByReference pTInfo) {
|
||||
|
||||
Pointer vptr = this.getPointer().getPointer(0);
|
||||
Function func = Function.getFunction(vptr.getPointer(16));
|
||||
PointerByReference ppTInfo = new PointerByReference();
|
||||
int hr = func.invokeInt(new Object[] { this.getPointer(), index, ppTInfo });
|
||||
pTInfo.setPointer(ppTInfo.getValue());
|
||||
|
||||
return new HRESULT(hr);
|
||||
}
|
||||
|
||||
public HRESULT GetTypeInfoType(
|
||||
/* [in] */UINT index,
|
||||
/* [out] */IntByReference pTKind) {
|
||||
|
||||
Pointer vptr = this.getPointer().getPointer(0);
|
||||
Function func = Function.getFunction(vptr.getPointer(20));
|
||||
int hr = func
|
||||
.invokeInt(new Object[] { this.getPointer(), index, pTKind });
|
||||
|
||||
return new HRESULT(hr);
|
||||
}
|
||||
|
||||
public HRESULT GetTypeInfoOfGuid(
|
||||
/* [in] */GUID guid,
|
||||
/* [out] */ITypeInfo.ByReference pTinfo) {
|
||||
|
||||
Pointer vptr = this.getPointer().getPointer(0);
|
||||
Function func = Function.getFunction(vptr.getPointer(24));
|
||||
PointerByReference ppTinfo = new PointerByReference();
|
||||
int hr = func.invokeInt(new Object[] { this.getPointer(), guid, ppTinfo });
|
||||
pTinfo.setPointer(ppTinfo.getPointer());
|
||||
|
||||
return new HRESULT(hr);
|
||||
}
|
||||
|
||||
public HRESULT GetLibAttr(
|
||||
/* [out] */TLIBATTR.ByReference ppTLibAttr) {
|
||||
|
||||
Pointer vptr = this.getPointer().getPointer(0);
|
||||
Function func = Function.getFunction(vptr.getPointer(28));
|
||||
int hr = func.invokeInt(new Object[] { this.getPointer(), ppTLibAttr });
|
||||
|
||||
return new HRESULT(hr);
|
||||
}
|
||||
|
||||
public HRESULT GetTypeComp(
|
||||
/* [out] */ITypeComp.ByReference pTComp) {
|
||||
|
||||
Pointer vptr = this.getPointer().getPointer(0);
|
||||
Function func = Function.getFunction(vptr.getPointer(32));
|
||||
PointerByReference ppTComp = new PointerByReference();
|
||||
int hr = func.invokeInt(new Object[] { this.getPointer(), ppTComp });
|
||||
pTComp.setPointer(ppTComp.getPointer());
|
||||
|
||||
return new HRESULT(hr);
|
||||
}
|
||||
|
||||
public HRESULT GetDocumentation(
|
||||
/* [in] */int index,
|
||||
/* [out] */BSTR pBstrName,
|
||||
/* [out] */BSTR pBstrDocString,
|
||||
/* [out] */DWORDbyReference pdwHelpContext,
|
||||
/* [out] */BSTR pBstrHelpFile) {
|
||||
|
||||
Pointer vptr = this.getPointer().getPointer(0);
|
||||
Function func = Function.getFunction(vptr.getPointer(36));
|
||||
int hr = func.invokeInt(new Object[] { this.getPointer(), index,
|
||||
pBstrName, pBstrDocString, pdwHelpContext, pBstrHelpFile });
|
||||
|
||||
return new HRESULT(hr);
|
||||
}
|
||||
|
||||
public HRESULT IsName(
|
||||
/* [annotation][out][in] */
|
||||
WString szNameBuf,
|
||||
/* [in] */ULONG lHashVal,
|
||||
/* [out] */BOOLbyReference pfName) {
|
||||
|
||||
Pointer vptr = this.getPointer().getPointer(0);
|
||||
Function func = Function.getFunction(vptr.getPointer(40));
|
||||
int hr = func.invokeInt(new Object[] { this.getPointer(), szNameBuf,
|
||||
lHashVal, pfName });
|
||||
|
||||
return new HRESULT(hr);
|
||||
}
|
||||
|
||||
public HRESULT FindName(
|
||||
/* [annotation][out][in] */
|
||||
WString szNameBuf,
|
||||
/* [in] */ULONG lHashVal,
|
||||
/* [length_is][size_is][out] */ITypeInfo.ByReference ppTInfo,
|
||||
/* [length_is][size_is][out] */MEMBERIDbyReference rgMemId,
|
||||
/* [out][in] */USHORTbyReference pcFound) {
|
||||
|
||||
Pointer vptr = this.getPointer().getPointer(0);
|
||||
Function func = Function.getFunction(vptr.getPointer(44));
|
||||
int hr = func.invokeInt(new Object[] { this.getPointer(), szNameBuf,
|
||||
lHashVal, ppTInfo, rgMemId, pcFound });
|
||||
|
||||
return new HRESULT(hr);
|
||||
}
|
||||
|
||||
public void ReleaseTLibAttr(/* [in] */TLIBATTR pTLibAttr) {
|
||||
Pointer vptr = this.getPointer().getPointer(0);
|
||||
Function func = Function.getFunction(vptr.getPointer(48));
|
||||
func.invokeInt(new Object[] { this.getPointer(), pTLibAttr });
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,101 @@
|
||||
/* Copyright (c) 2012 Tobias Wolf, All Rights Reserved
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*/
|
||||
package com.sun.jna.platform.win32.COM;
|
||||
|
||||
import com.sun.jna.Function;
|
||||
import com.sun.jna.Pointer;
|
||||
import com.sun.jna.PointerType;
|
||||
import com.sun.jna.Structure;
|
||||
import com.sun.jna.platform.win32.Guid.IID;
|
||||
import com.sun.jna.platform.win32.WinNT.HRESULT;
|
||||
import com.sun.jna.ptr.PointerByReference;
|
||||
|
||||
/**
|
||||
* Wrapper class for the ITypeInfo interface
|
||||
*
|
||||
* Method Name V-Table Offset IUnknown.QueryInterface 0 IUnknown.AddRef 4
|
||||
* IUnknown.Release 8
|
||||
*
|
||||
* @author Tobias Wolf, wolf.tobias@gmx.net
|
||||
*/
|
||||
public class IUnknown extends PointerType {
|
||||
|
||||
/**
|
||||
* The Class ByReference.
|
||||
*/
|
||||
public static class ByReference extends IUnknown implements
|
||||
Structure.ByReference {
|
||||
}
|
||||
|
||||
/** The Constant IID_IDispatch. */
|
||||
public final static IID IID_IDispatch = new IID(
|
||||
"{00000000-0000-0000-C000-000000000046}");
|
||||
|
||||
/**
|
||||
* Instantiates a new i unknown.
|
||||
*/
|
||||
public IUnknown() {
|
||||
}
|
||||
|
||||
/**
|
||||
* Instantiates a new i unknown.
|
||||
*
|
||||
* @param pvInstance
|
||||
* the pv instance
|
||||
*/
|
||||
public IUnknown(Pointer pvInstance) {
|
||||
this.setPointer(pvInstance);
|
||||
}
|
||||
|
||||
/**
|
||||
* Query interface.
|
||||
*
|
||||
* @param riid
|
||||
* the riid
|
||||
* @param ppvObject
|
||||
* the ppv object
|
||||
* @return the hresult
|
||||
*/
|
||||
public HRESULT QueryInterface(IID riid, PointerByReference ppvObject) {
|
||||
Pointer vptr = this.getPointer().getPointer(0);
|
||||
Function func = Function.getFunction(vptr.getPointer(0));
|
||||
int hr = func.invokeInt(new Object[] { this.getPointer(), riid,
|
||||
ppvObject });
|
||||
|
||||
return new HRESULT(hr);
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds the ref.
|
||||
*
|
||||
* @return the ulong
|
||||
*/
|
||||
public int AddRef() {
|
||||
Pointer vptr = this.getPointer().getPointer(0);
|
||||
Function func = Function.getFunction(vptr.getPointer(4));
|
||||
|
||||
return func.invokeInt(new Object[] { this.getPointer() });
|
||||
}
|
||||
|
||||
/**
|
||||
* Release.
|
||||
*
|
||||
* @return the ulong
|
||||
*/
|
||||
public int Release() {
|
||||
Pointer vptr = this.getPointer().getPointer(0);
|
||||
Function func = Function.getFunction(vptr.getPointer(8));
|
||||
|
||||
return func.invokeInt(new Object[] { this.getPointer() });
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,112 @@
|
||||
/* Copyright (c) 2010 Daniel Doubrovkine, All Rights Reserved
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*/
|
||||
package com.sun.jna.platform.win32;
|
||||
|
||||
import com.sun.jna.Native;
|
||||
import com.sun.jna.Pointer;
|
||||
import com.sun.jna.platform.win32.WinCrypt.CRYPTPROTECT_PROMPTSTRUCT;
|
||||
import com.sun.jna.platform.win32.WinCrypt.DATA_BLOB;
|
||||
import com.sun.jna.ptr.PointerByReference;
|
||||
import com.sun.jna.win32.StdCallLibrary;
|
||||
import com.sun.jna.win32.W32APIOptions;
|
||||
|
||||
/**
|
||||
* Crypt32.dll Interface.
|
||||
* @author dblock[at]dblock.org
|
||||
*/
|
||||
public interface Crypt32 extends StdCallLibrary {
|
||||
|
||||
Crypt32 INSTANCE = (Crypt32) Native.loadLibrary("Crypt32",
|
||||
Crypt32.class, W32APIOptions.UNICODE_OPTIONS);
|
||||
|
||||
/**
|
||||
* The CryptProtectData function performs encryption on the data in a DATA_BLOB
|
||||
* structure. Typically, only a user with the same logon credential as the encrypter
|
||||
* can decrypt the data. In addition, the encryption and decryption usually must be
|
||||
* done on the same computer.
|
||||
* @param pDataIn
|
||||
* Pointer to a DATA_BLOB structure that contains the plaintext to be encrypted.
|
||||
* @param szDataDescr
|
||||
* String with a readable description of the data to be encrypted. This description
|
||||
* string is included with the encrypted data. This parameter is optional and can
|
||||
* be set to NULL, except on Windows 2000.
|
||||
* @param pOptionalEntropy
|
||||
* Pointer to a DATA_BLOB structure that contains a password or other additional
|
||||
* entropy used to encrypt the data. The DATA_BLOB structure used in the encryption
|
||||
* phase must also be used in the decryption phase. This parameter can be set to NULL
|
||||
* for no additional entropy.
|
||||
* @param pvReserved
|
||||
* Reserved for future use and must be set to NULL.
|
||||
* @param pPromptStruct
|
||||
* Pointer to a CRYPTPROTECT_PROMPTSTRUCT structure that provides information about
|
||||
* where and when prompts are to be displayed and what the content of those prompts
|
||||
* should be. This parameter can be set to NULL in both the encryption and decryption
|
||||
* phases.
|
||||
* @param dwFlags
|
||||
* One of CRYPTPROTECT_LOCAL_MACHINE, CRYPTPROTECT_UI_FORBIDDEN, CRYPTPROTECT_AUDIT,
|
||||
* CRYPTPROTECT_VERIFY_PROTECTION.
|
||||
* @param pDataOut
|
||||
* Pointer to a DATA_BLOB structure that receives the encrypted data. When you have
|
||||
* finished using the DATA_BLOB structure, free its pbData member by calling the
|
||||
* LocalFree function.
|
||||
* @return
|
||||
* If the function succeeds, the function returns TRUE. If the function fails,
|
||||
* it returns FALSE. For extended error information, call GetLastError.
|
||||
*/
|
||||
public boolean CryptProtectData(DATA_BLOB pDataIn, String szDataDescr,
|
||||
DATA_BLOB pOptionalEntropy, Pointer pvReserved,
|
||||
CRYPTPROTECT_PROMPTSTRUCT pPromptStruct,
|
||||
int dwFlags,
|
||||
DATA_BLOB pDataOut);
|
||||
|
||||
/**
|
||||
* The CryptUnprotectData function decrypts and does an integrity check of the data in
|
||||
* a DATA_BLOB structure. Usually, only a user with the same logon credentials as the
|
||||
* encrypter can decrypt the data. In addition, the encryption and decryption must be
|
||||
* done on the same computer.
|
||||
* @param pDataIn
|
||||
* Pointer to a DATA_BLOB structure that holds the encrypted data. The DATA_BLOB
|
||||
* structure's cbData member holds the length of the pbData member's byte string that
|
||||
* contains the text to be encrypted.
|
||||
* @param szDataDescr
|
||||
* Pointer to a string-readable description of the encrypted data included with the
|
||||
* encrypted data. This parameter can be set to NULL. When you have finished using
|
||||
* ppszDataDescr, free it by calling the LocalFree function.
|
||||
* @param pOptionalEntropy
|
||||
* Pointer to a DATA_BLOB structure that contains a password or other additional
|
||||
* entropy used when the data was encrypted. This parameter can be set to NULL;
|
||||
* however, if an optional entropy DATA_BLOB structure was used in the encryption
|
||||
* phase, that same DATA_BLOB structure must be used for the decryption phase.
|
||||
* @param pvReserved
|
||||
* Reserved for future use; must be set to NULL.
|
||||
* @param pPromptStruct
|
||||
* Pointer to a CRYPTPROTECT_PROMPTSTRUCT structure that provides information about
|
||||
* where and when prompts are to be displayed and what the content of those prompts
|
||||
* should be. This parameter can be set to NULL.
|
||||
* @param dwFlags
|
||||
* DWORD value that specifies options for this function. This parameter can be zero,
|
||||
* in which case no option is set, or CRYPTPROTECT_UI_FORBIDDEN.
|
||||
* @param pDataOut
|
||||
* Pointer to a DATA_BLOB structure where the function stores the decrypted data.
|
||||
* When you have finished using the DATA_BLOB structure, free its pbData member by
|
||||
* calling the LocalFree function.
|
||||
* @return
|
||||
* If the function succeeds, the return value is TRUE. If the function fails, the
|
||||
* return value is FALSE.
|
||||
*/
|
||||
public boolean CryptUnprotectData(DATA_BLOB pDataIn, PointerByReference szDataDescr,
|
||||
DATA_BLOB pOptionalEntropy, Pointer pvReserved,
|
||||
CRYPTPROTECT_PROMPTSTRUCT pPromptStruct,
|
||||
int dwFlags,
|
||||
DATA_BLOB pDataOut);
|
||||
}
|
||||
Alguns arquivos não foram exibidos porque demasiados arquivos foram alterados neste diff Mostrar Mais
Referência em uma Nova Issue
Bloquear um usuário